【问题标题】:javascript regex for password containing at least 8 characters, 1 number, 1 upper and 1 lowercase [duplicate]用于密码的javascript正则表达式,包含至少8个字符、1个数字、1个大写和1个小写[重复]
【发布时间】:2013-01-28 19:43:48
【问题描述】:

我正在尝试编写一个正则表达式来验证必须满足以下条件的密码:

  • 至少包含 8 个字符
  • 至少包含 1 个数字
  • 至少包含 1 个小写字符 (a-z)
  • 至少包含 1 个大写字符 (A-Z)
  • 仅包含 0-9a-zA-Z

我尝试了以下方法,但它似乎不起作用。

http://jsfiddle.net/many_tentacles/Hzuc9/

<input type='button' value='click' class='buttonClick' />
<input type='text' />
<div></div>

还有……

$(".buttonClick").click(function () {

    if ($("input[type=text]").filter(function () {
        return this.value.match(/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])([a-zA-Z0-9]{8})$/);
    })) {
        $("div").text("pass");
    } else {
        $("div").text("fail");
    }

});

有什么想法吗?

【问题讨论】:

标签: javascript jquery regex validation


【解决方案1】:

您的正则表达式仅允许 8 个字符。使用{8,} 指定八个或更多而不是{8}

但是为什么要限制密码的允许字符范围呢?我的手机可以在几分钟内破解 8 个字符的字母数字密码。

【讨论】:

    【解决方案2】:

    至少 8 = {8,}:

    str.match(/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])([a-zA-Z0-9]{8,})$/)
    

    【讨论】:

      【解决方案3】:

      使用单独的正则表达式来测试不同的部分比试图让一个正则表达式覆盖所有部分要容易得多。它还可以更轻松地添加或删除验证条件。

      另外请注意,您对.filter() 的使用不正确;它总是会返回一个 jQuery 对象(在 JavaScript 中被认为是真实的)。就个人而言,我会使用.each() 循环来遍历所有输入,并报告各个通过/失败状态。类似于以下内容:

      $(".buttonClick").click(function () {
      
          $("input[type=text]").each(function () {
              var validated =  true;
              if(this.value.length < 8)
                  validated = false;
              if(!/\d/.test(this.value))
                  validated = false;
              if(!/[a-z]/.test(this.value))
                  validated = false;
              if(!/[A-Z]/.test(this.value))
                  validated = false;
              if(/[^0-9a-zA-Z]/.test(this.value))
                  validated = false;
              $('div').text(validated ? "pass" : "fail");
              // use DOM traversal to select the correct div for this input above
          });
      });
      

      Working demo

      【讨论】:

      • 你好像忘记了'!' if(!/[^0-9a-zA-Z]/.test(this.value))
      • @hodcaspi 这是一个五年半的答案,但不,我绝对没有。
      【解决方案4】:

      您的正则表达式应如下所示:

      /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,}$/
      

      这里有一个解释:

      /^
        (?=.*\d)          // should contain at least one digit
        (?=.*[a-z])       // should contain at least one lower case
        (?=.*[A-Z])       // should contain at least one upper case
        [a-zA-Z0-9]{8,}   // should contain at least 8 from the mentioned characters
      $/
      

      【讨论】:

      • 这不是 OP(在我看来是错误的)所要求的。它允许使用除字母数字以外的其他字符。
      • 感谢您的注意,我已修复。
      • 像魅力一样工作! rubular.com/r/jf69EWPQ4N
      • (/^(?=.*\d)(?=.*[az])(?=.*[AZ]).{8,}$/) 如果用户可以输入符号和空格 - 允许更安全的密码
      • 我想我迟到了......但是,当我想用​​其他字符设置密码时,我认为它不起作用。它可以在 abcItisPass43 中工作,但不能在 abcItisPass43& 中。我的意思是,在 $、%、&、# 等字符中不起作用。
      猜你喜欢
      • 2016-02-13
      • 2012-09-28
      • 2012-05-30
      • 1970-01-01
      • 2015-01-18
      • 2017-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多