当前位置: 首页 > 知识库问答 >
问题:

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

洪飞龙
2023-03-14

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

  • 至少包含8个字符

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

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");
    }

});

有什么想法吗?

共有3个答案

封昊天
2023-03-14

至少8={8,}

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

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

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

工作演示

沙星波
2023-03-14

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

/^(?=.*\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
$/
 类似资料: