我有以下正则表达式:
#^(?=.{8,20})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*\W).*$#
此正则表达式匹配一个字符串,该字符串至少包含一个组a-z A-Z 0-9和特殊字符。
是否可以编写一个正则表达式来匹配4个子模式中的至少3个(一个preg_match,而不是多个)?
例如,字符串应与A-Z,0-9和a-z 或 A-Z,0-9和特殊字符匹配。 但也应该允许4/4。
答案 0 :(得分:2)
当然,你只能有四个条件中的三个,只需写下所有可能性的替换:
/^(?:(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])|(?=.*[a-z])(?=.*[A-Z])(?=.*\W)|...|...|...).{8,20}$/
我刚写了两个替代方案,太复杂了。您需要自己填写...
部分。
我建议你不要用一个正则表达式做到这一点。它变得复杂并且容易出错。分别测试条件并计算匹配的数量。