javascript - 需要一个允许所有特殊字符的密码验证正则表达式

标签 javascript regex validation passwords

密码要求是:

  • 至少两个字母
  • 至少两个数字
  • 至少一个特殊字符(任何特殊字符)
  • 至少 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/

相关文章:

javascript - 如何在字符串中搜索字符串数组中包含的所有值? (JavaScript)

javascript - 使用替换为浏览器前缀 js/css

javascript - 使 Font Awesome 停止闪烁或隐藏

python - 处理正则表达式组中的字符串后替换所有出现的正则表达式组

c++ - g++正则表达式在(可能是非语法的)表达式上崩溃

javascript - jQuery:检查包含特定值的表行是否已经存在

javascript - 如何检测鼠标何时停止在 React 中移动?

javascript - 将变量移动到第二个组件并保存在状态中

php - 如何匹配 [...] 的正则表达式模式

java - Spring Boot 表单验证以确保一个日期不会早于另一个日期?