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

Posted

技术标签:

【中文标题】用于密码的javascript正则表达式,包含至少8个字符、1个数字、1个大写和1个小写[重复]【英文标题】:javascript regex for password containing at least 8 characters, 1 number, 1 upper and 1 lowercase [duplicate] 【发布时间】: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");
    

);

有什么想法吗?

【问题讨论】:

contains only 0-9a-zA-Z 是一个非常糟糕的规则 解决方案参考:aspforums.net/Threads/103764/… 【参考方案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& 中。我的意思是,在 $、%、&、# 等字符中不起作用。

以上是关于用于密码的javascript正则表达式,包含至少8个字符、1个数字、1个大写和1个小写[重复]的主要内容,如果未能解决你的问题,请参考以下文章

用于密码验证的正则表达式 Java

用于测试密码强度的正则表达式

Javascript校验密码复杂度的正则表达式

包含至少 8 个字符和至少 1 个非字母数字字符的密码的正则表达式

用于密码验证的正则表达式 [重复]

如何实现密码正则表达式?