包含至少 8 个字符、1 个数字、1 个大写和 1 个小写的密码的 javascript 正则表达式

IT技术 javascript jquery regex validation
2021-03-11 04:22:01

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

  • 至少包含 8 个字符
  • 包含至少 1 个数字
  • 包含至少 1 个小写字符 (az)
  • 包含至少 1 个大写字符 (AZ)
  • 仅包含 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个回答

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

/^(?=.*\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
$/
我想我迟到了......但是,当我想用​​其他字符设置密码时,我认为它不起作用。它可以在abcItisPass43运行,但不能在abcItisPass43& 中运行我要说的是,在$、%、&、#字符中不起作用
2021-04-16 04:22:01
奇迹般有效!rubular.com/r/jf69EWPQ4N
2021-04-19 04:22:01
谢谢你的提示,我修好了。
2021-04-23 04:22:01
这不是在做 OP(错误地,在我看来)所要求的。它允许使用字母数字以外的其他字符。
2021-05-05 04:22:01
(/^(?=.*\d)(?=.*[az])(?=.*[AZ]).{8,}$/) 如果用户可以输入符号和空格 - 允许更多安全密码
2021-05-14 04:22:01

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

另请注意,您使用的.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
    });
});

工作演示

@hodcaspi 这是一个已有五年半历史的答案,但不,我绝对没有。
2021-04-22 04:22:01
看来你忘记了“!” if(!/[^0-9a-zA-Z]/.test(this.value))
2021-05-04 04:22:01

至少 8 = {8,}

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

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

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