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

时间:2018-11-12 14:15:55

标签: javascript regex passwords

我需要一个具有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中使用此正则表达式。

1 个答案:

答案 0 :(得分:0)

几乎应该在前面的{处添加一个否定断言,而不是一个不匹配的字符。这样一来,您就可以输入任何字符,而不必考虑会弄乱您所有规则的断言。

这将是您的正则表达式: ^(?=[^\{])((?=.*?[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。这将使(?=的用法更加清楚。