[英]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
或者要獲得更復雜的解決方案(我想您正在尋找),可以嘗試以下方法:
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);
監視用戶正在鍵入的內容並從其下方更改其輸入是不好的UX習慣。 他可能認為自己的鍵盤壞了。 我不知道這種方法何時或如何如此普及,但值得慶幸的是它似乎正在消失。
無論如何,嘗試使用正則表達式來處理數字始終是一個壞主意,而正則表達式是為處理字符串而設計的。 如果出於某些原因需要檢查某個字符串是否為有效數字,請使用數字API,例如!isNaN(+value)
。
在輸入字段上使用適當的type
或pattern
屬性進行驗證。 如果那還不夠,請驗證用戶何時按下“提交”按鈕或等效按鈕。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.