寻找具有至少一个小写字母,至少一个大写字母,至少一个数字和一个字母的密码的正则表达式。长度在6到14之间

时间:2015-06-16 10:29:43

标签: regex

我正在寻找验证密码的正则表达式。密码规则是:

  • 至少一个小写字母
  • 至少一个大写字母
  • 至少一位数
  • 长度在6到14之间

我创建了以下正则表达式,但它无效

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

它正在接受

  • qwerty1
  • QWERTY1

    但不是qwERTy

即。它只满足了两个条件

  • 至少一位数
  • 长度在6到14之间

2 个答案:

答案 0 :(得分:2)

我不确定这是可能的,但我确信如果是这样,并且结果是一个长而复杂的正则表达式字符串,那么这是一个错误的设计决定。它将是不可维护的,不清楚且非常容易出错。

与此同时,这很容易做到,理解和维护:

function isValid(password)
{
  if(password.length < 6 || password.length > 14)
    return false;

  var valid = { hasLower: false, hasUpper: false, hasDigit: false };
  for(var i = 0; i < password.length; i++) {
    var c = password[i];
    var upperC = c.toUpperCase();
    valid.hasLower |= c != upperC;
    valid.hasUpper |= c == upperC;
    valid.hasDigit |= c >= '0' && c <= '9';
  }

  return valid.hasLower && valid.hasUpper && valid.hasDigit;
}

alert('"123abcDEF" valid = ' + isValid('123abcDEF'));
alert('"123  DEF" valid = ' + isValid('123  DEF'));

答案 1 :(得分:1)

您可以使用\S代替.来限制空格:

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])\S{6,14}$
                                ^

请参阅DEMO