密码要求是:
- 至少两个字母
- 至少两个数字
- 至少一个特殊字符(任何特殊字符)
- 至少 8 个字符
这个已经很接近但不起作用:
/^(?=.*\d)(?=.*[a-zA-Z])(?=.*[\W]).{8,}$/
我做错了什么?
最佳答案
此正则表达式满足您的要求:
/^(?=(?:[^a-z]*[a-z]){2})(?=(?:[^0-9]*[0-9]){2})(?=.*[!-\/:-@\[-`{-~]).{8,}$/i
玩the demo查看匹配和不匹配的内容。
说明
- 这是一种经典的密码验证技术,具有环视功能,如 this article 中所述。
- 末尾的
i
标志使其不区分大小写,因此我们不必说a-zA-Z
^
anchor 断言我们位于字符串的开头- 第一个前瞻
(?=(?:[^a-z]*[a-z]){2})
断言此位置(字符串的开头)后面的任何字符不是一个字母,后跟一个字母...两次,确保至少有两个字母 - 第二个前瞻
(?=(?:[^0-9]*[0-9]){2})
断言该位置后面的内容(仍然是字符串的开头) ) 是非数字的任何字符,后跟一个数字...两次,确保至少有两个字母 - 第三个前瞻
(?=.*[!-\/:-@\[-
{-~])` 断言该位置后面的内容(仍然是字符串的开头)是任意字符,后跟一个特殊字符 $
anchor 断言我们位于字符串的末尾
特殊字符注意事项
正则表达式 [!-\/:-@\[-
{-~]` 专门从 the ASCII table 中挑选出所有既不是数字也不是字母的可打印字符。 。如果其中包含您不需要的字符,请对其进行更多限制。
关于javascript - 需要一个允许所有特殊字符的密码验证正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24442564/