1
2
试试这个:
这里是非捕获组
|
2
3
就我个人而言,我认为强制使用所有三个字符类的密码策略并不是很有帮助。通过让人们制作更长的密码,可以获得相同程度的随机性。如果用户必须遵守太多的密码规则(这会使密码难以记住),他们往往会感到沮丧并记下密码。我建议计算熵的位,并确保它们大于60(通常需要10-14个字符的密码)。每个字符的熵大致取决于字符的数量、它们使用的字符集的范围,以及它们在字符集之间切换的频率(我猜像Heythere这样的密码比Heythere更容易预测)。 另一个注意事项:您是否计划不计算键盘右侧的符号(句点、逗号、尖括号等)? 如果你还需要找到两个字符的组,为什么不重复每个模式呢?例如,使= d)进入(?)= \D**D)。 对于您的测试用例,如果您担心它只检查第一个条件,那么编写一个测试用例,确保以下每个密码都失败(因为在每个情况下都不满足其中一个条件):为了好玩,我颠倒了每个字符的期望顺序ET,不过除非有人把它移走/忘记,否则它可能不会有什么区别?=在未来某个日期。
我应该指出,从技术上讲,这些密码都不应该被接受,因为它们使用字典中的单词,每个字符的熵大约为2位,而不是6位。然而,我意识到编写一个(可维护且高效的)正则表达式来检查字典单词是很困难的。 |
3
2
如果我正确理解您的问题,您至少需要15个字符,并且需要至少2个大写字符、至少2个小写字符、至少2个数字和至少2个特殊字符。那样的话你可以这样做:
顺便说一下,原来的regex在 |
4
1
我不确定一个大的正则表达式是正确的方式来这里。这看起来已经太复杂了,将来很难改变。 我的建议是按以下方式构建代码:
这还允许您传递一个返回代码或错误字符串,指定不接受密码的原因,代码将简单得多。 |