^
(?:
(?=.*[a-z]) # 1. there is a lower-case letter ahead,
(?: # and
(?=.*[A-Z]) # 1.a.i) there is also an upper-case letter, and
(?=.*[\d\W]) # 1.a.ii) a number (\d) or symbol (\W),
| # or
(?=.*\W) # 1.b.i) there is a symbol, and
(?=.*\d) # 1.b.ii) a number ahead
)
| # OR
(?=.*\W) # 2.a) there is a symbol, and
(?=.*[A-Z]) # 2.b) an upper-case letter, and
(?=.*\d) # 2.c) a number ahead.
)
.{8,} # the password must be at least 8 characters long.
$
4条答案
按热度按时间dojqjjoe1#
不要用一个正则表达式来检查它。
如果必须使用单个正则表达式:
这个正则表达式没有进行效率优化。它是由
A·B·C + A·B·D + A·C·D + B·C·D
经过一些因式分解构造而成的。分解:k3bvogb12#
你可以编写一个非常复杂的正则表达式来实现这一点。相反,我建议编写四个不同的正则表达式,每个规则一个,然后逐个测试它们,计算它们中有多少匹配。如果四个中有三个匹配,就接受密码。
ttygqcqt3#
您可以使用以下正则表达式:
密码最小长度为8,最大长度为32,您可以使用以下正则表达式:
9ceoxa924#
我建议分别做检查,然后合计有多少匹配。
(我也不会在其中任何一个中使用正则表达式,但这只是我个人的观点-即它们妨碍可读性,通常是一次性编写的代码)