RegEx:前三个字符唯一+附加匹配

时间:2015-02-20 19:24:16

标签: java objective-c regex passwords policy

我希望用RegEx实现密码策略。

该政策包含以下规则:

  1. 前三个字符必须是唯一的
  2. 密码长度必须至少为8个字符
  3. 密码必须至少包含一个字母,一个数字和一个特殊字符(白名单)
  4. 我发现这个模式匹配1):

    ^(.)((?!\1).)((?!\1)(?!\2).)((?!\1)(?!\2)(?!\3))

    此模式与2)和3)匹配:

    ^(?=.*[a-zA-Z].*)(?=.*[0-9].*)(?=.*[$&+,:;=?@#|'<>.^*()%!-].*)(.{8,})

    现在我将这两种模式合二为一。有人可以帮忙吗? ; - )

2 个答案:

答案 0 :(得分:1)

或者,不要将它们组合成一个。只需一次检查3个正则表达式中的每一个。如果您需要添加新规则或更改现有规则(特别是因为您已经在组合它们时遇到问题),将它们组合起来会很可怕并且难以理解。

答案 1 :(得分:0)

您可以使用此正则表达式:

^(?=(.)(?!\1)(.)(?!\1)(?!\2))(?=.*[a-zA-Z])(?=\D*\d)(?=.*?[$&+,:;=?@#|'<>.^*()%!-])(.{8,})$

RegEx Demo

(?=(.)(?!\1)(.)(?!\1)(?!\2)) # Makes sure first 3 characters are unique using lookaheads