2012-07-23 61 views
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 )和數字(nombre)在表單輸入上,他告訴我密碼很弱,當他告訴我這是平均的。他完全無視第二個條件。

我不知道這是怎麼回事=/

PS:我很抱歉,如果已經有在其它問題,這個答案,但我甚至不知道問題是什麼,所以我不不知道要搜索什麼=/

+0

*編輯,固定標題的拼寫 – Undefined 2012-07-23 08:51:49

回答

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)是千真萬確的。

+0

謝謝,這確實起作用:) – 2012-07-23 08:33:26

0

其實我傾向於相信第三個條件沒有得到評估,因爲它是第二個更大的案例,考慮切換第二個如果第三個,它應該工作。

第二個如果可以包含小寫字母,但也可以包含數字,因爲match()會評估它是否包含這樣的事情,所以在執行第二個執行之前,第三個將檢查是否有數字,如果沒有然後只檢查字母。

+0

謝謝,謝謝:) – 2012-07-23 08:34:03

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 
}