[英]Regular expression: convert to positive
我不熟悉正則表達式。 我碰到了以下代碼,該代碼應同時允許負值和正值。 當前功能會自動將負值轉換為正值。
parseInputNum: function(val){
var sep = val.lastIndexOf('.') > val.lastIndexOf(',')? '.' : ',';
var arr = val.replace(new RegExp('[^\\d'+sep+']+', 'g'), '').match(new RegExp('(\\d+(?:['+sep+']\\d+|))$'));
return arr? arr[1].replace(/[,]/g, '.') : false;
}
我對正則表達式並不熟悉,這是我的誠實。
盡管Jerry的回答解決了OP的緊迫問題,但我認為首先了解原始功能的目的以及修改后的功能可以解決問題,從而更能理解OP的工作原理。
,
進.
全球。 它將負數轉換為正數的事實並不是其目的,而是該事實的副作用-
未指定為有效字符。
上面的第一行只是指出小數點分隔符是否為.
或者,
因為一些國家使用,
作為小數分隔符。
var sep = val.lastIndexOf('.') > val.lastIndexOf(',')? '.' : ',';
第二行做兩件事。
''
替換它們,除去數字和檢測到的分隔符以外的所有字符。 它執行匹配以驗證所得的字符串是否看起來像一個有效數字,該字符串由“一個或多個數字”定義,可以選擇后跟單個定界符以及另一個有效的數字序列。
var arr = val.replace(new RegExp('[^\\\\d'+sep+']+', 'g'), '').match(new RegExp('(\\\\d+(?:['+sep+']\\\\d+|))$'));
第三行首先檢查第二行是否成功匹配,如果不成功則返回false
。 如果匹配成功,它將返回結果字符串all ,
替換為.
。
正如傑里(Jerry)在回答中正確描述的那樣,解決方法是雙重的。
-
添加到允許的字符集中,以便在刪除無關字符期間不會消除該字符。 -
,以便匹配不會拒絕負數。 以下是消除負號的內容:
val.replace(new RegExp('[^\\d'+sep+']+', 'g'), '')
更改它:
val.replace(new RegExp('[^\\d'+sep+'-]+', 'g'), '')
^
在此處添加-
表示將不會刪除這些內容。 [^\\\\d'+sep+'-]
將匹配除數字和分隔符之外的所有字符。 添加-
表示將不再匹配-
因此,請不要將其刪除。
然后該位與數字匹配。 我對此不太確定,但我相信您需要用以下內容替換它:
match(new RegExp('(-?\\d+(?:['+sep+']\\d+|))$'));
^^
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.