正则表达式匹配具有两个或多个特殊字符的强密码

2024-02-04

我需要使用 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(使用前将#替换为@)

正则表达式匹配具有两个或多个特殊字符的强密码 的相关文章