开发者问题收集

Javascript 中密码验证的正则表达式

2013-06-14
15703

正则表达式密码复杂性要求在创建或更改密码时必须应用以下四个特征中的 任意三个

  • 字母字符 - 至少 1 个大写字母字符
  • 字母字符 - 至少 1 个小写字母字符
  • 数字字符 - 至少 1 个数字字符
  • 特殊字符 - 至少 1 个特殊字符

我正在尝试使用以下代码,但它不适用于 特殊字符

(?=^.{6,}$)((?=.*\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))^.*

我希望我的正则表达式针对以下 4 种情况进行验证

匹配情况

  • P@ssword
  • Password1
  • p@ssword1
  • p@12345
3个回答

我认为您可以使用的正则表达式是:

(?=^.{6,}$)(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[^A-Za-z0-9]).*

我不确定为什么您的正则表达式中有这么多或运算符,但这个匹配 if:

  • (?=^.{6,}$) - 字符串为 > 5 个字符
  • (?=.*[0-9]) - 包含数字
  • (?=.*[A-Z]) - 包含大写字母
  • (?=.*[a-z]) - 包含小写字母
  • (?=.*[^A-Za-z0-9]) - 非字母数字字符。

正则表达式图像

Jerry
2013-06-14

我认为在这种情况下,单个正则表达式会很混乱。您可以轻松执行类似操作

var count = 0;

count += /[a-z]/.test(password) ? 1 : 0;
count += /[A-Z]/.test(password) ? 1 : 0;
count += /\d/.test(password) ? 1 : 0;
count += /[@]/.test(password) ? 1 : 0;

if(count > 2) {
    alert('valid')
}
Arun P Johny
2013-06-14

使用此正则表达式:

(?=^.{6,10}$)(?=. \d)(?=. [a-z])(?=. [A-Z])(?=. [!@#$%^&*()_+}{":;'?/>.<,])(?!. \s). $**

2013-06-14