首页 文章

javascript正则表达式密码包含至少8个字符,1个数字,1个大写和1个小写[重复]

提问于
浏览
52

这个问题在这里已有答案:

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

  • 包含至少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");
    }

});

有任何想法吗?

4 回答

  • 150

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

    /^(?=.*\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
    $/
    
  • 2

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

    另请注意,您对 .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

  • 16

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

    但是为什么要限制密码允许的字符范围?几分钟内我的手机就可以强制使用8个字符的字母数字密码 .

  • 2

    至少8 = {8,}

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

相关问题