密码强度的正则表达式,第一个字符有附加规则

Regex for Password strength with additional rules on first character

我需要一个密码强度的正则表达式,它有 3 个不同的规则:

  1. 4 组中至少有 3 组(小写、大写、数字、特殊字符)
  2. 最少 8 个字符
  3. 第一个字符不是“{”(实施此功能的某些产品限制)

到目前为止,我有一个实现前两个规则的正则表达式。此外,我能够扩展正则表达式以限制第一个字符。然而,我目前的问题是,当我限制第一个字符时,它不会被考虑到第一条规则。例如。以下密码不通过:$MyPassword

初始规则:^((?=.*?[A-Z])(?=.*?[a-z])(?=.*?\d)|(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[^a-zA-Z0-9])|(?=.*?[A-Z])(?=.*?\d)(?=.*?[^a-zA-Z0-9])|(?=.*?[a-z])(?=.*?\d)(?=.*?[^a-zA-Z0-9])).{8,}$

扩展规则:^[^{]{1}((?=.*?[A-Z])(?=.*?[a-z])(?=.*?\d)|(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[^a-zA-Z0-9])|(?=.*?[A-Z])(?=.*?\d)(?=.*?[^a-zA-Z0-9])|(?=.*?[a-z])(?=.*?\d)(?=.*?[^a-zA-Z0-9])).{8,}$

由于我对正则表达式仍然有些迷惑,我希望能提供包含一些解释的解决方案。

提前致谢!

注意:我将在 javascript 中使用此正则表达式。

差不多了,你应该在前面的 { 上放置一个否定断言,而不是一个不匹配的字符。这使您可以输入任何字符,并且不计入会破坏所有规则的断言。

这将是您的正则表达式: ^(?=[^\{])((?=.*?[A-Z])(?=.*?[a-z])(?=.*?\d)|(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[^a-zA-Z0-9])|(?=.*?[A-Z])(?=.*?\d)(?=.*?[^a-zA-Z0-9])|(?=.*?[a-z])(?=.*?\d)(?=.*?[^a-zA-Z0-9])).{8,}$

如果您想知道自己在做什么,请查看解释断言的 this article。这将使 (?= 的用法更加清晰。