1

我有以下正则表达式:

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

此正则表达式匹配包含至少一个组 az AZ 0-9 和特殊字符的字符串。

是否可以编写一个正则表达式来匹配 4 个子模式中的至少 3 个(一个 preg_match,而不是多个)?

例如,字符串应匹配 AZ、0-9 和 azAZ、0-9 和特殊字符。但也应该允许 4/4。

4

1 回答 1

2

当然,你只能有四分之三的条件,只需写一个包含所有可能性的替代:

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

我只写了2个替代方案,太复杂了。您需要自己填写...零件。

我建议您不要使用单个正则表达式来执行此操作。它变得复杂并且容易出错。分别测试条件并计算匹配的数量。

于 2013-03-04T08:14:33.407 回答