我需要一个具有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中使用此正则表达式。
答案 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。这将使(?=
的用法更加清楚。