如何在Swift中组合正则表达式?

How to combine regular expressions in Swift?

我有以下各个正则表达式,我想使用 AND 条件将它们组合起来,我正在使用它们来验证密码

.[A-Z]+. - 验证大写(最少一个字母大写)

.[0-9]+. - 验证号码(至少一个号码)

.[a-z]+. - 验证小写(最少一个小写)

.{8,} - 验证最小字符 8

.[^A-Za-z0-9]. - 验证特殊字符(至少一个特殊字符)

(.)\1 - 验证连续字符(无连续字符)

现在我正在分别验证每个字符,但我只想在一个函数中完成

我尝试了以下组合方式

/^((.))(.[A-Z]+.)(.[a-z]+.)(.[0-9]+.)(.[^A-Za-z0-9].).*$/

上面没有所有的表达式,但我试图展示我是如何做到的。

一个选项是使用一组正前瞻使用 negated character classes:

^(?=[^A-Z]*[A-Z])(?=[^a-z]*[a-z])(?=[^0-9]*[0-9])(?!.*(.))(?=[a-zA-Z0-9]*[^A-Za-z0-9\s])\S{8,}$

将匹配:

  • ^ 字符串开头
  • (?=[^A-Z]*[A-Z]) 断言大写
  • (?=[^a-z]*[a-z]) 断言小写
  • (?=[^0-9]*[0-9]) 断言数字
  • (?!.*(.)) 断言没有连续的字符
  • (?=[a-zA-Z0-9]*[^A-Za-z0-9\s]) 声明未列出的字符,包括空白字符(假设不允许)
  • \S{8,} 匹配非空白字符 8 次以上
  • $ 字符串结束

Regex demo

请注意,允许的字符 \S 是广泛匹配,您可以使用字符 class.

指定允许匹配的内容