Password REGEX with min 6 chars, at least one letter and one number and may contain special characters
我需要一个有条件的正则表达式:
- 最少6个字符,最多50个字符
- 必须包含1个字母
- 必须包含1个数字
- 可能包含特殊字符,如!"${$%^"和(*)(+)
目前我有模式:
但是它不允许特殊字符,有人有一个好的regex吗?
谢谢
也许可以使用一个regex,但这使得很难向用户反馈他们不遵守的规则。类似这样的更传统的方法会给您提供反馈,您可以在用户界面中使用这些反馈来告诉用户哪些PWD规则没有得到满足:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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的回答,我写了这个小提琴来测试他的解决方案,并做了一些小改动,使其更直观:
http://jsfiddle.net/9rb49/1/
这就是代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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"); } |
顺便说一句,它的工作方式很有魅力!;)
致以最诚挚的问候,当然还要感谢JFFriends00!
与这些(常见)密码要求相匹配的更优雅、自包含的regex是:
1 | ^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d^a-zA-Z0-9].{5,50}$ |
这里的优雅之处在于,您不必硬编码符号,如$@等。要接受所有符号,您只需说:"接受所有非字母数字字符,而不是数字"。regex
检查仅包含字符、数字、下划线的7到16个字符之间的密码,第一个字符必须是字母-
/^[A-Za-z]\w{7,14}$/
检查包含至少一个数字、一个大写字母和一个小写字母的6到20个字符之间的密码。
/^(?=.\d)(?=.[a-z])(?=.*[A-Z]).{6,20}$/
请检查包含至少一个数字和一个特殊字符的7到15个字符之间的密码。
/^(?=.[0-9])(?=.[!@#$%^&])[a-zA-Z0-9!@#$%^&]{7,15}$/
检查包含至少一个小写字母、一个大写字母、一个数字数字和一个特殊字符的8到15个字符之间的密码。
/^(?=.\d)(?=.[a-z])(?=.[A-Z])(?=.[^a-zA-Z0-9])(?!.*\s).{8,15}$/
我希望这能帮助别人。有关更多信息,请查看本文和此网站regexr.com。
我有一个正则表达式,但有点棘手。
1 | ^(?:(?<Numbers>[0-9]{1})|(?<Alpha>[a-zA-Z]{1})|(?<Special>[^a-zA-Z0-9]{1})){6,50}$ |
让我解释一下,以及如何检查测试密码是否正确:
regex中有三个命名组。1)"数字":将匹配字符串中的单个数字。2)"alpha":将匹配从"a"到"z"或"a"到"z"的单个字符。3)"特殊":将匹配不是"字母"或"数字"的单个字符。
这三个命名组被分组到一个可选组中,
为了确保输入正确的密码,您必须检查是否有匹配的密码,然后检查匹配的组是否如您所希望的那样被捕获。我是C开发人员,不知道它在JavaScript中是如何工作的,但在C中,您必须检查:
1 | match.Groups["Numbers"].Captures.Count > 1 |
希望它在JavaScript中也能工作!祝你好运!
我用这个
1 2 3 4 | export const validatePassword = password => { const re = /^(?=.*[A-Za-z])(?=.*\d)[a-zA-Z0-9!@#$%^&*()~¥=_+}{":;'?/>.<,`\-\|\[\]]{6,50}$/ return re.test(password) } |