簡體   English   中英

正則表達式:轉換為正數

[英]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的工作原理。

功能目的

  1. 要更改分隔符,. 全球。
  2. 消除既不是數字也不是十進制分隔符的多余字符。

它將負數轉換為正數的事實並不是其目的,而是該事實的副作用-未指定為有效字符。

該功能實際上是做什么的?

上面的第一行只是指出小數點分隔符是否為. 或者,因為一些國家使用,作為小數分隔符。

    var sep = val.lastIndexOf('.') > val.lastIndexOf(',')? '.' : ','; 

第二行做兩件事。

  1. 通過匹配它們並用空字符串''替換它們,除去數字和檢測到的分隔符以外的所有字符。
  2. 它執行匹配以驗證所得的字符串是否看起來像一個有效數字,該字符串由“一個或多個數字”定義,可以選擇后跟單個定界符以及另一個有效的數字序列。

     var arr = val.replace(new RegExp('[^\\\\d'+sep+']+', 'g'), '').match(new RegExp('(\\\\d+(?:['+sep+']\\\\d+|))$')); 

第三行首先檢查第二行是否成功匹配,如果不成功則返回false 如果匹配成功,它將返回結果字符串all ,替換為.

傑里的修復。

正如傑里(Jerry)在回答中正確描述的那樣,解決方法是雙重的。

  1. -添加到允許的字符集中,以便在刪除無關字符期間不會消除該字符。
  2. 在match子句的開頭添加一個可選的- ,以便匹配不會拒絕負數。

以下是消除負號的內容:

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.

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