我希望在我的网站上注册的用户选择的密码包括:
- 至少 8 个字符
- 至少一个大写字母
- 至少一个小写字母
至少一位数字。 但这些是最低要求。它们可以包含任何字符,例如 @、#、& 等,只要满足这些要求即可。我有以下正则表达式:
/^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?\d)\w{8,20}$/
但它不匹配除上面列出的要求之外的其他字符。我希望能够匹配可以包含任何字符但仍满足上述条件的密码。我该怎么做?
最佳答案
这将做你想要的:
/^(?=.*[A-Z])(?=.*[a-z])(?=.*\d).{8,}$/
说明:
^
匹配字符串的开头(?=.*[A-Z])
需要大写字符(?=.*[a-z])
需要小写字符(?=.*\d)
需要一个数字.{8,}
要求最小长度为 8。
注意:与 anubhava 的答案不同,这允许使用空白字符。如果您不需要空格,请按照 anubhava 的建议使用 \S
。
编辑:根据 @ridgerunner 在评论中的精彩观点,这里是一个稍微更有效的正则表达式:
/^(?=[^A-Z]*[A-Z])(?=[^a-z]*[a-z])(?=\D*\d).{8,}$/
此版本避免了惰性 .*
表达式,该表达式会浪费时间在此上下文中测试整个正则表达式。
关于php - 用于匹配最低密码要求和其他字符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24164973/