首页 > 解决方案 > 如何在 Swift 中组合正则表达式?

问题描述

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

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

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

. [az]+。 - 验证小写(最少一个小写)

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

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

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

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

我尝试了以下组合方式

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

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

标签: iosswiftregexregex-negationregex-group

解决方案


一种选择是使用一组使用否定字符类的肯定前瞻:

^(?=[^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])断言未列出的字符,包括空格字符(假设不允许)
  • \S{8,}匹配 8+ 次非空白字符
  • $字符串结束

正则表达式演示

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


推荐阅读