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,}) 现在我被困在将这两种模式合并为一种模式中。有人能帮忙吗?;-)
^((?!\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