【问题标题】:Check password valid using regex in javascript在javascript中使用正则表达式检查密码是否有效
【发布时间】:2016-01-14 13:10:32
【问题描述】:
  • 密码不得超过八个字符
  • 密码必须至少包含 2 个小写字母。
  • 密码必须至少包含 2 个大写字母。
  • 密码必须至少包含 2 个数字字符。
  • 密码必须至少包含 2 个特殊字符。

我的代码

function checkPass(pw) {
var regx = new RegExp("^(?=.*[a-z]{2})(?=.*[A-Z]{2})(?=.*[0-9]{2})(?=.*[!@#\$%\^&\*\)\(]{2})(?=.{8,})");
return regx.test(pw);

}

checkPass('PAssword12#$') => true
checkPass('PaSsword12#$') => false

我想在 2 个大写字符不连续时返回 true。

谢谢!

【问题讨论】:

    标签: javascript regex passwords


    【解决方案1】:

    您需要使用$ 锚来检查长度(最好是从前瞻中移出该检查)并允许在它们之间插入一些非大写字母,如下所示:

    function checkPass(pw) {
      var regx = /^(?=(?:[^a-z]*[a-z]){2})(?=(?:[^A-Z]*[A-Z]){2})(?=(?:\D*\d){2})(?=(?:[^!@#$%^&*)(]*[!@#$%^&*)(]){2}).{8,}$/;
      return regx.test(pw);
     }
    document.write(checkPass('PAssword12#$') + "<br>");
    document.write(checkPass('PaSsword12#$'));

    请注意,我使用了对比原则:(?:[^a-z]*[a-z]){2} 匹配除a-z 之外的 2 个符号序列零次或多次后跟 1 个小写字母。我以同样的方式修改了所有的前瞻。

    【讨论】:

      【解决方案2】:

      与只匹配两个大写字符的 [AZ]{2} 不同,您必须为两个单独范围之间的任何其他字符输入一个可选匹配项(您必须为小写字母、数字和符号)。所以你会改为把

      [A-Z].*?[A-Z]

      您实际上也不需要检查它是否至少有 8 个字符,因为任何满足小写/大写字母、数字和符号标准的密码无论如何都必须至少有 8 个字符。

      【讨论】:

        猜你喜欢
        • 2013-04-29
        • 1970-01-01
        • 2011-09-17
        • 1970-01-01
        • 1970-01-01
        • 2010-10-18
        • 2011-12-30
        • 2018-03-14
        • 1970-01-01
        相关资源
        最近更新 更多