2012-08-23 15 views
20

Sto provando a convalidare la password usando l'espressione regolare. La password viene aggiornata se abbiamo tutti i caratteri come alfabeti. Dove sto andando storto? è l'espressione regolare giusto?Convalida della parola d'ordine regolare Javascript con caratteri speciali

function validatePassword() { 
    var newPassword = document.getElementById('changePasswordForm').newPassword.value; 
    var minNumberofChars = 6; 
    var maxNumberofChars = 16; 
    var regularExpression = /^[[email protected]#$%^&*]{6,16}$/; 
    alert(newPassword); 
    if(newPassword.length < minNumberofChars || newPassword.length > maxNumberofChars){ 
     return false; 
    } 
    if(!regularExpression.test(newPassword)) { 
     alert("password should contain atleast one number and one special character"); 
     return false; 
    } 
} 
+0

Cosa intendi per non essere valutato? –

+0

se la nuova password deve contenere almeno un numero e un carattere speciale. Anche senza queste condizioni, la password viene aggiornata. Credo di avere qualche problema con la mia espressione regolare. –

+2

Perché stai impostando una lunghezza massima arbitraria? – ChaosPandion

risposta

47

uso positivo lookahead asserzioni:

var regularExpression = /^(?=.*[0-9])(?=.*[[email protected]#$%^&*])[[email protected]#$%^&*]{6,16}$/; 

Senza di esso, la vostra regex corrente partite solo che si ha Da 6 a 16 caratteri validi, è non convalidare che ha almeno un numero e almeno un carattere speciale. Ecco a cosa serve il lookahead qui sopra.

  • (?=.*[0-9]) - Asserire che una stringa abbia almeno un numero;
  • (?=.*[[email protected]#$%^&*]) - Asserire che una stringa abbia almeno un carattere speciale.
+3

È possibile abbreviare l'espressione regolare in '/^(?=.*[\d])(?=.*[[email protected]#$%^&*])[\[email protected]#$%^&*]{6, 16} $/' – sQVe

+1

/^(?=.*[0-9])(?=.*[[email protected]#$%^&*])[[email protected]#$%^& *] {6,16} $ /. Test ("12345678 @ 12") restituirà true. Cosa fare se si desidera rendere obbligatorio includere anche gli alfabeti? – Bhuvan

1

Se si controlla la lunghezza separatamente, si possono fare le seguenti:

var regularExpression = /^[a-zA-Z]$/; 

if (regularExpression.test(newPassword)) { 
    alert("password should contain atleast one number and one special character"); 
    return false; 
} 
5

Non provare a fare troppo in un solo passaggio. Mantieni ogni regola separata.

function validatePassword() { 
    var p = document.getElementById('newPassword').value, 
     errors = []; 
    if (p.length < 8) { 
     errors.push("Your password must be at least 8 characters"); 
    } 
    if (p.search(/[a-z]/i) < 0) { 
     errors.push("Your password must contain at least one letter."); 
    } 
    if (p.search(/[0-9]/) < 0) { 
     errors.push("Your password must contain at least one digit."); 
    } 
    if (errors.length > 0) { 
     alert(errors.join("\n")); 
     return false; 
    } 
    return true; 
} 
+0

/az/i deve essere/[az]/i anche/[0-9]/i è corretto –

22
function validatePassword() { 
    var p = document.getElementById('newPassword').value, 
     errors = []; 
    if (p.length < 8) { 
     errors.push("Your password must be at least 8 characters"); 
    } 
    if (p.search(/[a-z]/i) < 0) { 
     errors.push("Your password must contain at least one letter."); 
    } 
    if (p.search(/[0-9]/) < 0) { 
     errors.push("Your password must contain at least one digit."); 
    } 
    if (errors.length > 0) { 
     alert(errors.join("\n")); 
     return false; 
    } 
    return true; 
} 

c'è un certo problema in risposta qui sotto in quanto non sta controllando intera stringa a causa della mancanza di [] durante il controllo i caratteri e numeri, questo è corretto versione

+0

Aggiungere questi se si desidera limitare i caratteri maiuscoli o minuscoli: 'if (p.search (/ [az] /) <0) { errors.push ("La tua password deve contenere almeno una lettera minuscola.") } if (p.search (/ [AZ] /) <0) { errors.push ("La tua password deve contenere almeno una lettera maiuscola. ")}' – saada

+0

Ecco una soluzione più dinamica, ma fondamentalmente utilizza questo stesso concetto: https://jsfiddle.net/omnius/p6uxjntg/ ​​ –

10

potete fare la vostra propria espressione regolare per JavaScript convalida

/^   : Start 
    (?=.{8,})  : Length 
    (?=.*[a-zA-Z]) : Letters 
    (?=.*\d)   : Digits 
    (?=.*[!#$%&? "]) : Special characters 
    $/    : End 



     (/^ 
     (?=.*\d)    //should contain at least one digit 
     (?=.*[a-z])    //should contain at least one lower case 
     (?=.*[A-Z])    //should contain at least one upper case 
     [a-zA-Z0-9]{8,}   //should contain at least 8 from the mentioned characters 

     $/) 

Example:- /^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9]{7,}$/ 
+1

Questo errore per XYZ @ 123 –

+5

@SarasArya aggiungi '@' in caratteri speciali. inizierà a funzionare. Non è scienza missilistica! – mumair

2

io uso il seguente script per un minimo di 8 lettera della password, con almeno un simbolo, lettere maiuscole e minuscole e un numero

function checkPassword(str) 
{ 
    var re = /^(?=.*\d)(?=.*[[email protected]#$%^&*])(?=.*[a-z])(?=.*[A-Z]).{8,}$/; 
    return re.test(str); 
} 
Problemi correlati