我无法弄清楚为什么这个功能在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++;
};