Java 正则表达式:前三个字符唯一+;附加匹配

Java 正则表达式:前三个字符唯一+;附加匹配,java,objective-c,regex,passwords,Java,Objective C,Regex,Passwords,我期待着实现一个与正则表达式的密码策略 该策略包含以下规则之一: 前三个字符必须是唯一的 密码长度必须至少为8个字符 密码必须至少包含一个字母、一个数字和一个特殊字符(白名单) 我发现此模式与1)匹配: ^((?!\1)。(?!\1)(?!\2)。((?!\1)(?!\2)(?!\3)) 此模式匹配2)和3): ^(?=.[a-zA-Z].(?=.[0-9].*)(?=.[$&+,:;=?@#|'。^*()%!-])(.{8,}) 现在我被困在将这两种模式合并为一种模式中。有人能帮忙吗?;-)

我期待着实现一个与正则表达式的密码策略

该策略包含以下规则之一:

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

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

    此模式匹配2)和3):

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


    现在我被困在将这两种模式合并为一种模式中。有人能帮忙吗?;-)

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

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

    或者,不要将它们合并为一个。只需逐个检查3个正则表达式。如果你需要添加新的规则,或者改变现有的规则(尤其是因为你已经很难将它们组合起来),组合它们将是可怕的和不可理解的。

    你可能想考虑一些不是正则表达式的东西。我有一个原因,为什么你不能应用多个正则表达式?我只是觉得把所有的条件组合成一个模式可能是个好主意。应在多个平台上使用相同的验证。
    (?=(.)(?!\1)(.)(?!\1)(?!\2)) # Makes sure first 3 characters are unique using lookaheads