这个问题是正则表达式中问题的复杂性:我想要这个和那个......以任何顺序。这个问题最赞成的解决方案是:
^(?=.*one)(?=.*two)(?=.*three).*$
现在,如果我不仅需要检查字符集,还需要检查某种字符的数量怎么办? 例如:
- 至少两个大写拉丁字母
- 至少两个小写拉丁字母
- 至少两位数
- 至少两个指定的特殊字符
。是任何订单。
我不知道从哪里开始,因为我不明白?=.
在我们的案例中做什么。
处理额外四个要求的一种选择是添加额外的正面前瞻断言:
^
(?=.*one) match "one" (in any order)
(?=.*two) match "two"
(?=.*three) match "three"
(?=[^A-Z]*[A-Z][^A-Z]*[A-Z]) two uppercase letters
(?=[^a-z]*[a-z][^a-z]*[a-z]) two lowercase letters
(?=D*dD*d) two digits
(?=[A-Za-z0-9]*[^A-Za-z0-9][A-Za-z0-9]*[^A-Za-z0-9]) two symbols (two non alphanumeric)
.* consume the input
$