正则表达式:必须有 N 个类型 "A" 的符号,并且必须有 M 个类型 "B" 的符号......以任何顺序



这个问题是正则表达式中问题的复杂性:我想要这个和那个......以任何顺序。这个问题最赞成的解决方案是:

^(?=.*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
$

演示

最新更新