2017-02-05 56 views
0

我已經測試了三個正則表達式的http://www.regexpal.com/,他們是我需要的,但是當做正則表達式測試時,2個返回false(BTC和CAD),只有比特幣地址似乎工作(你可以在下面用這個錢包進行測試)。正則表達式測試方法返回false時,它應該是真的

13dHNxtbckAFM4PzdBqWgymFJmcv3Yzi32

https://jsfiddle.net/ps2fj1ff/1 (所有相關的代碼是在HTML部分)

var regWallet = new RegExp("^[13][a-km-zA-HJ-NP-Z1-9]{25,34}$"); 
    var regBTC = new RegExp("^\d*\.\d*$"); 
    var regCAD = new RegExp("^\d+(\.(\d{2}))?$"); 

    $('#button1').on('click', function() { 

     var btcCheck = $('#amount_btc').val(); 

     if (regBTC.test(btcCheck)) { 

     } else { 
      alert("Invalid BTC value!"); 
     } 

     var cadCheck = $('#amount_cad').val(); 

     if (regCAD.test(cadCheck)) { 

     } else { 
      alert("Invalid CAD value!"); 
     } 

     var walletCheck = $('#wallet').val(); 
     if (regWallet.test(walletCheck)) { 

     } else { 
      alert("Invalid Bitcoin address, please make sure you've entered a valid address!"); 
     } 
    }); 

回答

1

的原因是,在var regBTC = new RegExp("^\d*\.\d*$");\是用來逃跑的字符,所以如果你console.log(regBTC)你會看到它爲^d*.d*$

爲了防止這種情況,你將不得不加倍逃避它:var regBTC = new RegExp("^\\d*\\.\\d*$");

或者更好的使用/代替:var regBTC = /^\d*\.\d*$/;

這同樣適用於其他的正則表達式了。

(我最初以爲單引號將工作太,但顯然不是在JavaScript)

+0

'新的RegExp(/.../)'是多餘的,只需使用'/.../' – AllTheTime

+0

就足夠了,我總是試圖儘可能少地改變代碼。但我認爲我不應該包括裁員。 –

+0

好點。但我也認爲,向OP展示一種更好的方式是有價值的,因此它們形成了更好的習慣,並且考慮到冗餘問題超出了他們所問的問題。 – AllTheTime

1

用這個代替:

var regBTC = /^\d*\.\d*$/; 
var regCAD = /^\d+(\.(\d{2}))$/; 

這是更清潔和更易讀,因爲大多數編輯器會給你正則表達式的語法高亮在這種格式。

實際上沒有任何理由使用new RegExp這迫使您將表達式作爲字符串編寫,這會強制您在使用JavaScript內置正確的正則表達式語法時使用混淆轉義。

+0

感謝您的輸入。 – NipBoss

+0

@NipBoss不客氣:D – AllTheTime

相關問題