关于jquery:javascript正则表达式,包含至少8个字符,1个数字,1个大写和1个小写的密码

javascript regex for password containing at least 8 characters, 1 number, 1 upper and 1 lowercase

本问题已经有最佳答案,请猛点这里访问。

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

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

我试过以下方法,但似乎不管用。

http://jsfiddle.net/many_触角/hzuc9/

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

还有…

1
2
3
4
5
6
7
8
9
10
11
$(".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");
    }

});

有什么想法吗?


正则表达式应该如下所示:

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

下面是一个解释:

1
2
3
4
5
6
/^
  (?=.*\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
$/


使用单个正则表达式来测试不同的部分要比使用单个正则表达式来覆盖所有部分容易得多。它还使添加或删除验证标准变得更容易。

还要注意,您对.filter()的使用是不正确的;它总是返回jquery对象(在javascript中被认为是真实的)。就我个人而言,我将使用一个.each()循环迭代所有输入,并报告单个通过/失败状态。如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$(".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
    });
});

工作演示


至少8={8,}

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

您的regex只允许8个字符。使用{8,}指定8个或更多,而不是{8}

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