簡體   English   中英

JavaScript:小數點格式的正則表達式

[英]JavaScript: Regex on decimals formatting

在我當前的應用程序中,我正在使用正則表達式為表單實現字段驗證。

更具體地說,我在處理帶小數的數字的邊緣情況時遇到麻煩。

本質上,我使用正則表達式來防止用戶在輸入字段中鍵入錯誤的信息。

例如,如果用戶輸入12.2然后輸入. 之后,我使用正則表達式檢測不應該存在的內容,並替換為空字符串, ''

這是我當前使用回調函數的實現:

export const checkFormat = (typeFormat, value) => {
  //value is stringified
  switch (typeFormat) {
    //...
    case NUMERIC_DECIMALS: {
      return value.replace(/(\d+\.\d+)(\.*)\d*/g, '$1')
    }
  }

}

但是,當前的正則表達式實現無法處理以下情況

  • 用戶類型: . ,然后.. ==> .
  • 用戶類型: 123.2 ,然后1.23.2 ==> 1.232

我是Regex的新手,因此顯然需要一些工作

您可以嘗試以下方法:

^(\d+(?:\.\d+)).*$

並替換為:

$1

正則表達式101演示

或者要獲得更復雜的解決方案(我想您正在尋找),可以嘗試以下方法:

 const regex = /^(\\d+(?:\\.\\d*))|(\\.)?/gm; const str = ["1.2","...","g..g","1.23","1.2.3.4",".,",".,","123.2","1.23.2","14","1","15.6.4789756465","g"]; const replaceRegex = /[^\\.\\d]/gm; for(var i=0;i<str.length;i++) { var res=str[i].replace(replaceRegex,'').split(regex); var finalResult=""; var alreadyContainsDot=false; for(var j=0;j<res.length;j++) if(res[j]!=null && res[j]!="") { if(res[j].includes(".") && !alreadyContainsDot) alreadyContainsDot=true; else if(res[j].includes(".") && alreadyContainsDot) res[j]=res[j].replace(/\\./gm,''); finalResult+=res[j]; } console.log(str[i]+"==>"+finalResult); } 

如果我對需求的解釋是正確的,那么應該可以:

const regex = /(\d+\.?\d+?)(\D+)/g;
const str = `131/1.13.ad`;
const subst = `$1`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);

Regex101鏈接

監視用戶正在鍵入的內容並從其下方更改其輸入是不好的UX習慣。 他可能認為自己的鍵盤壞了。 我不知道這種方法何時或如何如此普及,但值得慶幸的是它似乎正在消失。

無論如何,嘗試使用正則表達式來處理數字始終是一個壞主意,而正則表達式是為處理字符串而設計的。 如果出於某些原因需要檢查某個字符串是否為有效數字,請使用數字API,例如!isNaN(+value)

在輸入字段上使用適當的typepattern屬性進行驗證。 如果那還不夠,請驗證用戶何時按下“提交”按鈕或等效按鈕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM