检查是字符串包含特殊字符和数字和字母中至少 2 个字符

Check is string contains special characters and at least 2 characters amongs digit and letter

大家好,我正在尝试检查密码是否包含特殊字符和至少 2 个字符(数字或字母) 所以像这样:

("&#€$&&÷") ====> false

("&#&'&*#5") ====> false

(">~<<`<•5t") ====> true

("{\><>\tt") =====> true

("65%#^$*@") ====> true

("7373673") ====> false

("7267373~") ====> true

我试过这个正则表达式,但它似乎不起作用:

/^((?=.*\d{2})|(?=.*?[a-zA-Z]{2}))/

您可以断言同一前瞻中出现的 2 次字符或数字,然后至少匹配一个“特殊”字符。

使用不区分大小写的模式:

^(?=(?:[^a-z\d\n]*[a-z\d]){2})[a-z\d]*[~!@#$%^&*()_+<>•`{}\][~!@#$%^&*()_+<>•`{}\a-z\d]*$

模式匹配:

  • ^ 字符串开头
  • (?:[^a-z\d\n]*[a-z\d]){2} 断言字符 a-z 或数字出现 2 次。 [^a-z\d\n]* 部分使用 [^ 否定字符 class 以防止不必要的回溯
  • [a-z\d]* 匹配可选字符 a-z 或数字
  • [~!@#$%^&*()_+<>•`{}\]匹配一个特殊字符
  • [~!@#$%^&<em>()_+<>•`{}\a-z\d]</em>匹配可选的允许字符
  • $ 字符串结束

Regex demo