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

时间:2019-05-21 16:33:44

标签: ios swift regex regex-negation regex-group

我有以下单个正则表达式,我想使用AND条件对其进行组合,我正在使用它们来验证密码

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

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

[a-z] +。-验证小写字母(至少一个小写字母)

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

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

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

现在我要分别验证每个字符,但我只想在一个功能中完成

我尝试了以下合并方式

  

/ ^((。)\ 1)(。 [AZ] +。)(。 [az] +。)(。 [0- 9] +。)(。 [^ A-Za-z0-9]。)。* $ /

上面没有所有的表达式,但是我试图显示我的表现。

1 个答案:

答案 0 :(得分:2)

一个选择是使用negated character classes使用一组正向先行:

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

这将匹配:

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

Regex demo

请注意,\S允许的字符是广泛匹配,您可以使用字符类指定允许匹配的字符。