正则表达式匹配字符串与3/4子模式

时间:2013-03-04 08:06:51

标签: php regex preg-match

我有以下正则表达式:

#^(?=.{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。

1 个答案:

答案 0 :(得分:2)

当然,你只能有四个条件中的三个,只需写下所有可能性的替换:

/^(?:(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])|(?=.*[a-z])(?=.*[A-Z])(?=.*\W)|...|...|...).{8,20}$/

我刚写了两个替代方案,太复杂了。您需要自己填写...部分。

我建议你不要用一个正则表达式做到这一点。它变得复杂并且容易出错。分别测试条件并计算匹配的数量。