javascript - Javascript - 验证密码必须包含2个大写字母

  显示原文与译文双语对照的内容

有人能告诉我为什么这个函数不工作?密码长度和号码检查工作完美,但大写字母的支票有问题。


function validera() {


var passw = document.getElementById("User-Password").value;


var upper = /[A-Z]/ ;


var number = /[0-9]/;



if (passw.length < 6 || !number.test(passw) || !upper.test(passw)) {


 if (passw.length < 6) {


 alert("Please make sure password is longer than 6 characters.")


 return false;


 }



 var counter = 0;


 var i;


 for(i = 0; i < passw.length; i++){


 passw.charAt(i)


 if(upper.test(passw.charAt(i))){


 counter++;


 break;


 }


 }



 if( counter < 2 ){


 alert("Please make sure password includes 2 capital letters")


 return false;



 }



 if (!number.test(passw)) {


 alert("Please make sure Password Includes a Digit")


 return false;


 }



} else {


 alert("Account created")


}



或者我必须使用正规表达式?

时间:

一旦增加break一次,counter就会把你带出循环

移除它,你应该可以


for(let i = 0; i < passw.length; i++){


 if(upper.test(passw.charAt(i))){


 counter++;


 }


}



如果希望一旦命中2,就退出,可以使用另一个if语句


for(let i = 0; i < passw.length; i++){


 if(upper.test(passw.charAt(i))){


 counter++;


 }


 if (counter >= 2) {


 break;


 }


}



除此之外,使用inside来定义变量let循环是很好的做法

...