密码REGEX,最少6个字符,至少一个字母和一个数字,可能包含特殊字符

时间:2011-10-21 02:29:52

标签: javascript asp.net regex

我需要一个带条件的正则表达式:

  • 最少6个字符,最多50个字符
  • 必须包含1个字母
  • 必须包含1个号码
  • 可能包含特殊字符,例如!@#$%^& *()_ +

目前我有模式:(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{6,50})$

然而,它不允许使用特殊字符,是否有人有正确的正则表达式?

由于

7 个答案:

答案 0 :(得分:60)

也许可以使用单个正则表达式,但这使得很难向用户反馈他们没有遵循的规则。像这样的更传统的方法会为您提供反馈,您可以在UI中使用这些反馈来告诉用户哪些pwd规则未得到满足:

function checkPwd(str) {
    if (str.length < 6) {
        return("too_short");
    } else if (str.length > 50) {
        return("too_long");
    } else if (str.search(/\d/) == -1) {
        return("no_num");
    } else if (str.search(/[a-zA-Z]/) == -1) {
        return("no_letter");
    } else if (str.search(/[^a-zA-Z0-9\!\@\#\$\%\^\&\*\(\)\_\+]/) != -1) {
        return("bad_char");
    }
    return("ok");
}

答案 1 :(得分:15)

在jfriend00回答之后我写了这个小提琴来测试他的解决方案,并进行一些小改动,使其更具视觉效果:

http://jsfiddle.net/9RB49/1/

这是代码:

checkPwd = function() {
    var str = document.getElementById('pass').value;
    if (str.length < 6) {
        alert("too_short");
        return("too_short");
    } else if (str.length > 50) {
        alert("too_long");
        return("too_long");
    } else if (str.search(/\d/) == -1) {
        alert("no_num");
        return("no_num");
    } else if (str.search(/[a-zA-Z]/) == -1) {
        alert("no_letter");
        return("no_letter");
    } else if (str.search(/[^a-zA-Z0-9\!\@\#\$\%\^\&\*\(\)\_\+\.\,\;\:]/) != -1) {
        alert("bad_char");
        return("bad_char");
    }
    alert("oukey!!");
    return("ok");
}
不过,它的工作就像一个魅力! ;)

最好的问候和感谢jfriend00当然!

答案 2 :(得分:3)

符合这些(常见)密码要求的更优雅且独立的正则表达式是:

^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d^a-zA-Z0-9].{5,50}$

这里的优雅的触摸是你不必硬编码符号,例如$ @#等。要接受所有符号,你是简单地说:&#34;也接受所有不是字母数字的字符,而不是数字&#34;。 正则表达式{5,50}的最后部分可以很容易地更改并且对应于最小和最大字符数:在此特定示例中,直到5个字符,正则表达式返回非匹配(即,需要最少6个字符来验证)。同样,在50个字符后,它也会返回不匹配。

答案 3 :(得分:1)

我有一个正则表达式,但它有点棘手。

^(?:(?<Numbers>[0-9]{1})|(?<Alpha>[a-zA-Z]{1})|(?<Special>[^a-zA-Z0-9]{1})){6,50}$

让我解释一下,以及如何检查测试的密码是否正确:

正则表达式中有三个命名组。 1)“数字”:将匹配字符串中的单个数字。 2)“Alpha”:将匹配“a”到“z”或“A”到“Z”的单个字符 3)“特殊”:匹配单个字符不是“Alpha”或“Numbers”

这三个命名组被分组在一个替代组中,{6,50}建议正则表达式机器捕获上面提到的那些组中的至​​少6个,但不超过50个。

要确保输入正确的密码,您必须检查是否存在匹配项,之后,如果匹配的组被捕获的数量与您想要的一样多。我是一个C#开发人员,不知道它是如何在javascript中工作的,但在C#中你必须检查:

match.Groups["Numbers"].Captures.Count > 1

希望它在javascript中的工作方式相同!祝你好运!

答案 4 :(得分:1)

  1. 检查7到16个字符之间的密码,其中只包含字符,数字,下划线和第一个字符必须是字母 -

      

    / ^ [A-ZA-Z] \ W {7,14} $ /

  2. 检查6到20个字符之间的密码,其中包含至少一个数字,一个大写和一个小写字母

      

    / ^(?= \ d)(?=。 [A-Z])(?=。* [A-Z])。{6,20} $ /

  3. 检查7到15个字符之间的密码,其中至少包含一个数字和一个特殊字符

      

    / ^(= [0-9]。)(= ?[@#$%^&安培; <!EM>])![A-ZA-Z0-9 @ #$%^&安培; ] {7,15} $ /

  4. 检查8到15个字符之间的密码,其中包含至少一个小写字母,一个大写字母,一个数字和一个特殊字符

      

    / ^(?= \ d)(?=。 [AZ])(?= [AZ])(?=。 [^ A- ZA-Z0-9])(?!。* \ S)。{8,15} $ /

  5. 我希望这会对某人有所帮助。有关详情,请查看此article和此网站regexr.com

答案 5 :(得分:0)

我用这个

SensePlayerProximity

答案 6 :(得分:0)

DEMO https://jsfiddle.net/ssuryar/bjuhkt09/

按一下触发的功能。

HTML

<form>
<input type="text" name="testpwd" id="testpwd" class="form=control" onkeyup="checksPassword(this.value)"/>
<input type="submit" value="Submit" /><br />
<span class="error_message spassword_error" style="display: none;">Enter minimum 8 chars with atleast 1 number, lower, upper &amp; special(@#$%&!-_&amp;) char.</span>
</form>

脚本

function checksPassword(password){
var pattern = /^.*(?=.{8,20})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%&!-_]).*$/;
if(!pattern.test(password)) {
$(".spassword_error").show();
}else
{
$(".spassword_error").hide();
}
}