密码REGEX分钟6个字符,至less一个字母和一个数字,可能包含特殊字符

我需要一个正则expression式的条件:

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

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

然而,它不允许特殊字符,有没有人有一个很好的正则expression式?

谢谢

也许可以使用一个正则expression式,但是很难给用户反馈他们没有遵循的规则。 像这样一个更传统的方法给你反馈,你可以在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"); } 

以下jfriend00答案我写了这个小提琴来testing他的解决scheme,以一些小的变化,使其更直观:

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!

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

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

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

在正则expression式中有三个命名组。 1)“数字”:将匹配string中的单个数字。 2)“Alpha”:匹配从“a”到“z”或“A”到“Z”的单个字符。3)“Special”:匹配不是“Alpha”或“Numbers”的单个字符

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

为了确保input正确的密码,你必须检查是否有匹配,并在此之后,如果匹配的组被捕获尽可能多的,你想要的。 我是一个C#开发人员,不知道它是如何在JavaScript中工作,但在C#中,你将不得不检查:

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

希望它在JavaScript的作品相同! 祝你好运!

一个更优雅和自包含的正则expression式来匹配这些(通用)密码要求是:

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

这里的优雅之处在于,你不必硬编码诸如$ @#等符号。要接受所有的符号,你只需简单地说:“接受所有不是字母数字的字符而不是数字”。 正则expression式{5,50}的最后一部分可以很容易地改变,并且对应于最小字符数和最大字符数:在这个具体的例子中,直到5个字符,正则expression式返回一个不匹配(即最less需要6个字符来validation)。 同样,在50个字符之后,它也会返回一个不匹配的结果。

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

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

  2. 检查包含至less一个数字,一个大写字母和一个小写字母的6至20个字符的密码

    /?(?=。 \ d)(?=。 [az])(?=。* [AZ])。{6,20} $ /

  3. 检查包含至less一个数字和特殊字符的7至15个字符的密码

    / ^(?=。 [0-9])(?=。 [!@#$%^& ])[a-zA-Z0-9!@#$%^& ] {7,15} $ /

  4. 检查包含至less一个小写字母,一个大写字母,一个数字和一个特殊字符的8至15个字符的密码

    (?=。 [az])(?=。 [AZ])(?=。 [^ a-zA-Z0-9])(?!。* \ s)。{ 8,15} $ /

我希望这会帮助别人。 欲了解更多,请检查这篇文章和这个网站regexr.com