test()正则表达式函数在IE中不起作用?

时间:2014-11-03 16:16:54

标签: javascript google-chrome internet-explorer

我无法弄清楚为什么这个功能在chrome中工作,但不是IE:

function isOkPass(p){
    var categories = 0;
    var anUpperCase = /[A-Z]/;
    var aLowerCase = /[a-z]/; 
    var aNumber = /[0-9]/;
    var aSpecial = /[!|@|#|$|%|^|&|*|(|)|-|_]/;
    var obj = {};
    obj.result = true;

    if(p.length < 8){
        obj.result=false;
        obj.error="Password not long enough!"
        return obj;
    }

    var numUpper = 0;
    var numLower = 0;
    var numNums = 0;
    var numSpecials = 0;
    for(var i=0; i<p.length; i++){
        if(anUpperCase.test(p[i])) {
            numUpper++;
console.dir('UPPPER');
        } else if(aLowerCase.test(p[i])) {
            numLower++;
console.dir('LOWEERR');
        } else if(aNumber.test(p[i])) {
            numNums++;
console.dir('NUMBER');
        } else if(aSpecial.test(p[i])) {
            numSpecials++;
console.dir('special');
        }
    }

    if(numUpper >= 1){
        categories += 1;
    }
    if(numLower >= 1){
        categories += 1;
    }
    if(numNums >= 1){
        categories += 1;
    }
    if(numSpecials >= 1){
        categories += 1;
    }

    if(categories < 3){
        obj.categories= categories;
        obj.result= false;
        obj.error= "Password not complex enough!";
        return obj;
    }

    return obj;
}

用户在输入框中输入密码,当他们单击开箱即可使用此功能验证字符串。在Chrome中,它可以正常工作,但在IE中看起来test()表现得很奇怪。

我添加了一些调试消息,发现当我在输入框中输入一个数字(并单击它)时,IE会显示"LOWER"调试消息,其中chrome显示"NUMBER"调试消息为预期。我的代码出了什么问题?

编辑:在你们指出字符串被评估的愚蠢之后(我想我抓住了一个原本应该记录每种角色的脚本)我现在只是这样做:

if(aUpperCase.test(p)) {
    numUpper++;
};
if(aLowerCase.test(p)) {
    numLower++;
};
if(aNumber.test(p)) {
    numNums++;
};
if(aSpecial.test(p)) {
    numSpecials++;
};

0 个答案:

没有答案