我需要使用 javascript 正则表达式匹配密码字段,并满足以下要求:
- 至少 15 个字符
- 两个或多个小写字母
- 两个或多个大写字母
- 两位或更多数字
- 以下两个或多个特殊字符:!@#$%^&*-
我有一个正则表达式可以处理大多数情况:
/^.*(?=.{15,})(?=.{2,}\d)(?=.{2,}[a-z])(?=.{2,}[A-Z])(?=.{2,}[\!\@\#\$\%\^\&\*\-]).*$/
这里的问题在于符号,它适用于:
P@ssw0rdP@ssw0rd
Pssw0rdPssw0rd@@
Pssw0rd@@Pssw0rd
But not:
@@Pssw0rdPssw0rd
我设置了一个随机密码生成器来彻底测试这一点,因此任何想法都将不胜感激。谢谢!
/^(?=(?:.*[a-z]){2})(?=(?:.*[A-Z]){2})(?=(?:.*\d){2})(?=(?:.*[!@#$%^&*-]){2}).{15,}$/
你的前瞻是错误的。图案
(?=.{2,}[class])
表示匹配 2 个或更多字符(无论什么字符),然后跟随 1 个所需类别的字符。这与您指定的“所需类别的 2 个或更多字符”完全不同。
要正确测试文本中是否存在所需类别的字符,请使用
(?=.*[class])
因为你想检查两次,所以重复这个模式
(?=.*[class].*[class])
# equivalent to (?=(?:.*[class]){2})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)