当它应该为真时,RegEx测试方法返回false

时间:2017-02-05 07:02:01

标签: javascript jquery regex

我在http://www.regexpal.com/上测试了三个正则表达式,它们就是我需要的,但在进行正则表达式测试时,其中2个返回false(BTC和CAD),只有比特币地址似乎有用(你可以用下面这个钱包测试)。

  

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!");
        }
    }); 

2 个答案:

答案 0 :(得分:1)

原因是在var regBTC = new RegExp("^\d*\.\d*$"); \ console.log(regBTC)用于转义角色,因此如果^d*.d*$,您会将其视为var regBTC = new RegExp("^\\d*\\.\\d*$");

为了防止这种情况,您必须将其双重转义:/

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

其他正则表达式也是如此。

(我最初认为单引号也会起作用,但显然不是javascript)

答案 1 :(得分:1)

请改用:

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

它更干净,更易读,因为大多数编辑都会以这种格式为您提供正则表达式语法高亮显示。

使用new RegExp迫使您将表达式写为字符串时,没有任何合理的理由,当JavaScript中内置了正确的正则表达式语法时,这会强制您使用混乱的转义符