0

我正在使用一个小脚本来检查铭文形式的密码强度,这是脚本的相关部分:

    $('#password').keyup(function(){

    var password = $(this).val();
    password = $.trim(password);

    var lettre_min = /[a-z]/;
    var lettre_maj =/[A-Z]/;
    var nombre = /[0-9]/;
    var symbole = /[\`\!\"\?\$\%\^\&\*\(\)\_\-\+\=\{\[\}\]\:\;\@\'\~\#\|\\\<\,\>\.\/]/;

    if(password.length != 0)
    {   
        //password moin de 8 caractères
        if(password.length <8)
        {
            $('.bar').animate({width:'50px',height:'5px'},200).show();
            $('.bar').css('background-color','red');
            $('.error').text('Too short').show();
        }else

        //password faible
        if((password.match(lettre_min)) && password.length <12)
        {
            $('.bar').animate({width:'75px',height:'5px'},200).show();
            $('.bar').css('background-color','red');
            $('.error').text('Weak').show();
        }else

        //password moyen
        //1 type
        if((password.match(lettre_min)) && (password.match(nombre)) && password.length <12)
        {
            $('.bar').animate({width:'100px',height:'5px'},200).show();
            $('.bar').css('background-color','orange');
            $('.error').text('Average').show();
        }else ...

问题是:如果我在表单输入中输入字母(lettre_min)和数字(名词),他告诉我密码很弱,而他应该告诉我它是平均的。他完全忽略了第二个条件。

我不知道发生了什么=/

PS:很抱歉,如果在另一个问题中已经有这个答案,但我什至不知道问题是什么,所以我不知道要搜索什么=/

4

3 回答 3

0

实际上,我倾向于相信第三个条件没有得到评估,因为它是第二个更大的情况,考虑将第二个 If 与第三个切换,它应该可以工作。

第二个 if 可以包含小写字母但也可以包含数字,因为 match() 评估它是否包含那种东西,所以在执行第二个执行之前,第三个也会检查是否有数字,如果没有则只检查字母。

于 2012-07-23T08:24:13.300 回答
0

快速解决方案:

//password moyen
        //1 type
        if((password.match(lettre_min)) && (password.match(nombre)) && password.length <12)
        {
            $('.bar').animate({width:'100px',height:'5px'},200).show();
            $('.bar').css('background-color','orange');
            $('.error').text('Average').show();
        } else if((password.match(lettre_min)) && password.length <12)
        {
            $('.bar').animate({width:'75px',height:'5px'},200).show();
            $('.bar').css('background-color','red');
            $('.error').text('Weak').show();
        }

如果if((password.match(lettre_min)) && (password.match(nombre)) && password.length <12)是真的也比if((password.match(lettre_min)) && password.length <12)真的。

于 2012-07-23T08:25:49.290 回答
0

您检查密码强度的条件顺序错误。要解决这个问题:

if((password.match(lettre_min)) && password.length <12){
   if(password.match(nombre)){
     //average
   }else{
     //weak
   }
}else if(password.length < 8){
   //too short
}else{
   //it must be strong
}
于 2012-07-23T08:37:59.637 回答