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

时间:2013-06-14 07:07:51

标签: javascript jquery regex passwords

正则表达式密码复杂性要求在创建或更改密码时必须应用any three以下四个特征。

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

我正在尝试使用以下代码,但它不适用于special characters

(?=^.{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个案例进行验证

匹配案例

  • 2P @提供ssword
  • 密码1
  • 点@ ssword1
  • 点@ 12345

5 个答案:

答案 0 :(得分:6)

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

的操作
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')
}

答案 1 :(得分:4)

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

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

我不确定为什么你的正则表达式中有这么多或运算符,但如果符合以下情况则匹配:

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

Regular expression image

答案 2 :(得分:2)

使用此正则表达式:

(?= ^。{6,10} $)(?= \ d)(?=。 [AZ]); _ +} {“(= [AZ])(= [@#$%^&安培*(??!):;?”/>< ,])(?! \ S)。的$ **

答案 3 :(得分:0)

我认为你也需要这个特殊字符:[更新以拒绝空格]

    $(document).ready(function(){
    $('input').change(function(){
    var count = 0;
    var pass = $(this).val();
        count += /[a-z]/.test(pass) ? 1 : 0;
        count += /[A-Z]/.test(pass) ? 1 : 0;
        count += /\d/.test(pass) ? 1 : 0;
        count += /[^\w\d\s]/.test(pass) ? 1 : 0;
        (count>2 & !/[\s]+/.test(pass)) ? $(this).css('background-color','lime'):$(this).css('background-color','orange');
    });

});

和小提琴:jsFiddle

答案 4 :(得分:0)

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

    if(pattern.test(value)){
         return true;
    } else {
         return false;
    }

它的特殊性也很好。