【问题标题】:Validate password - must contain 2 capital letters验证密码 - 必须包含 2 个大写字母
【发布时间】:2020-05-16 08:53:11
【问题描述】:

谁能告诉我为什么这个功能不起作用?密码长度和号码检查工作完美。但是大写大写的check是有问题的……

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 语句会在您遇到第一个大写字母时立即中断循环。因此,您的计数器将始终为 1。
  • 为什么在 1 次正则表达式测试时会循环? if(!/[A-Z].*[A-Z]/.test(passw)){alert('Cap me twice!');return false;}
  • 还是不行? if(!/[A-Z].*[A-Z]/.test(passw)) {alert('Cap me two!') ;return false;} 就这样吗?我以前从未使用过正则表达式
  • 我仍然可以写“test1A”

标签: javascript validation passwords


【解决方案1】:

如果您打算使用正则表达式来查找两个大写字母,那么您可以使用 like

\w*[A-Z]\w*[A-Z]\w*

在 regextester 上测试这个 here

【讨论】:

    【解决方案2】:

    在这里查看Fiddle

    CreateRandomPassword(Length, isUpperAlpha, isLowerAlpha, isNumaric ,SpecialChars)
    

    我开发了生成密码的简单功能

    【讨论】:

      【解决方案3】:

      这是一个返回带有消息和布尔值的对象的函数。

      示例 sn-p:

      function testPassword(pwd) {
      
         if (pwd.length <= 6) 
              return { valid: false, message: "Please make sure password is longer than 6 characters." };
          
         if(!/[A-Z].*[A-Z]/.test(pwd))
              return { valid: false, message: "Please make sure password includes 2 capital letters" };
      
         if (!/\d/.test(pwd)) 
              return { valid: false, message: "Please make sure Password Includes a Digit" };
      
         if (/\s/.test(pwd)) 
              return { valid: false, message: "Please only use visible characters" };
      
         return { valid: true, message: "Valid Password" };
      }
       
      console.log(testPassword('Val1dPassword')); 
      console.log(testPassword('SH0rt')); 
      console.log(testPassword('No2capitals')); 
      console.log(testPassword('NoDigits'));
      console.log(testPassword('Has\tat least 1 WhiteSpace'));
       

      那么你的函数就可以简化了。

      function validera() {
          let passw = document.getElementById("User-Password").value;
          let check = testPassword(passwd);
          if (check.valid) {
              alert(check.message);
              return false;
          }
           else {
              alert("Account created")
          }
        }
      

      【讨论】:

        猜你喜欢
        • 2018-01-02
        • 2017-08-11
        • 2016-02-08
        • 2015-07-14
        • 2012-01-14
        • 1970-01-01
        • 2015-05-26
        • 2018-09-17
        • 2015-08-30
        相关资源
        最近更新 更多