我需要一个带条件的正则表达式:
最少6个字符,最多50个字符
必须包含1个字母
必须包含1个数字
可能包含特殊字符,如!@#$%^&*()_
目前我有模式: (?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{6,50})$
(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{6,50})$
但是它不允许特殊字符,有没有人有一个很好的正则表达式呢?
谢谢
关注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当然!
更符合这些(常见)密码要求的更优雅且独立的正则表达式是:
^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d^a-zA-Z0-9].{5,50}$
这里的优雅触感是你_116116_如$ @#等 . 要接受所有符号,你只需说:"accept also all the not alphanumeric characters and not numbers" . 正则表达式 {5,50} 的最后部分可以很容易地改变并且对应于最小和最大字符数:在该特定示例中,直到5个字符,正则表达式返回非匹配(即,需要最少6个字符来验证) . 类似地,在50个字符之后它也返回非匹配 .
{5,50}
我有一个正则表达式,但它有点棘手 .
^(?:(?<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)“Special”:匹配单个字符不是“Alpha”或“Numbers”
这三个命名组被分组在一个替代组中,并且 {6,50} 建议正则表达式机器捕获上面提到的那些组中的至少6个,但不超过50个 .
{6,50}
要确保输入正确的密码,您必须检查是否存在匹配项,之后,如果匹配的组被捕获的数量与您想要的一样多 . 我是一名C#开发人员,不知道它是如何在javascript中运行的,但在C#中你必须检查:
match.Groups["Numbers"].Captures.Count > 1
希望它在javascript中的工作方式相同!祝好运!
也许可以使用单个正则表达式,但这使得很难向用户反馈他们没有遵循的规则 . 像这样的更传统的方法为您提供反馈,您可以在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"); }
/ ^ [A-Za-z] \ w {7,14} $ /
/^(?=.\d)(?=.[a-z])(?=.*[A-Z]).{6,20}$/
/^(?=.[0-9])(?=.[!@#$%^&])[a-zA-Z0-9!@#$%^&]{7,15}$/
/^(?= . \ d)(?= . [az])(?= . [AZ])(?= . [^a- zA-Z0-9])(?! . * . ) . {8,15} $ /
我希望这会对某人有所帮助 . 有关更多信息,请查看此article和本网站regexr.com
5 回答
关注jfriend00回答我写了这个小提琴来测试他的解决方案,并进行一些小改动,使其更具视觉效果:
http://jsfiddle.net/9RB49/1/
这是代码:
顺便说一句,它的工作就像一个魅力! ;)
最好的问候和感谢jfriend00当然!
更符合这些(常见)密码要求的更优雅且独立的正则表达式是:
这里的优雅触感是你_116116_如$ @#等 . 要接受所有符号,你只需说:"accept also all the not alphanumeric characters and not numbers" . 正则表达式
{5,50}
的最后部分可以很容易地改变并且对应于最小和最大字符数:在该特定示例中,直到5个字符,正则表达式返回非匹配(即,需要最少6个字符来验证) . 类似地,在50个字符之后它也返回非匹配 .我有一个正则表达式,但它有点棘手 .
让我解释一下,以及如何检查测试的密码是否正确:
正则表达式中有三个命名组 . 1)“数字”:将匹配字符串中的单个数字 . 2)“Alpha”:匹配单个字符从“a”到“z”或“A”到“Z”3)“Special”:匹配单个字符不是“Alpha”或“Numbers”
这三个命名组被分组在一个替代组中,并且
{6,50}
建议正则表达式机器捕获上面提到的那些组中的至少6个,但不超过50个 .要确保输入正确的密码,您必须检查是否存在匹配项,之后,如果匹配的组被捕获的数量与您想要的一样多 . 我是一名C#开发人员,不知道它是如何在javascript中运行的,但在C#中你必须检查:
希望它在javascript中的工作方式相同!祝好运!
也许可以使用单个正则表达式,但这使得很难向用户反馈他们没有遵循的规则 . 像这样的更传统的方法为您提供反馈,您可以在UI中使用它来告诉用户未满足的pwd规则:
我希望这会对某人有所帮助 . 有关更多信息,请查看此article和本网站regexr.com