2012-08-23 56 views
20

Estoy tratando de validar la contraseña utilizando expresiones regulares. La contraseña se actualiza si tenemos todos los caracteres como alfabetos. ¿Dónde me estoy equivocando? es la expresión regular ¿verdad?Javascript validación de contraseña expresión regular que tiene caracteres especiales

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

¿Qué quieres decir con que no se está evaluando? –

+0

si la nueva contraseña debe contener al menos un número y un carácter especial. Incluso sin estas condiciones, la contraseña se está actualizando. Supongo que tengo un problema con mi expresión regular. –

+2

¿Por qué configuras una longitud máxima arbitraria? – ChaosPandion

Respuesta

47

Use lookahead afirmaciones positivas:

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

Sin ella, su expresión regular actual sólo partidos que tiene 6 a 16 caracteres válidos, que no lo hace validar que tiene al menos un número, y al menos un carácter especial. Para eso es lo que se busca con anticipación.

  • (?=.*[0-9]) - Assert a string tiene al menos un número;
  • (?=.*[[email protected]#$%^&*]) - Asegurar una cadena tiene al menos un carácter especial.
+3

posible acortar expresión regular para '/^(?=.*[\d])(?=.*[[email protected]#$%^&*])[\[email protected]#$%^&*]{6, 16} $/' – sQVe

+1

/^(?=.*[0-9])(?=.*[[email protected]#$%^&*])[[email protected]#$%^& *] {6,16} $ /. Test ("12345678 @ 12") devolverá verdadero. ¿Qué pasa si quiero que sea obligatorio incluir alfabetos también? – Bhuvan

1

Si marca la longitud por separado, se puede hacer lo siguiente:

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

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

no tratar de hacer demasiado en un solo paso. Mantenga cada regla por separado.

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

/z/i debe ser/[az]/i También/[0-9]/i es correcta –

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; 
} 

hay un cierto tema en respuesta a continuación, ya que no está comprobando cadena entera debido a la ausencia de [] durante la comprobación de los caracteres y números, esto es correcto versión

+0

Añadir estos si desea restringir mayúsculas o minúsculas: 'si (p.search (/ [az] /) <0) { errors.push ("Su contraseña debe contener al menos una letra minúscula.") } si (p.search (/ [AZ] /) <0) { errors.push ("Su clave tiene contiene al menos una letra mayúscula. ") }' – saada

+0

Aquí hay una solución más dinámica, pero básicamente utiliza este mismo concepto: https://jsfiddle.net/omnius/p6uxjntg/ ​​ –

10

puede hacer su propia expresión regular para la validación javascript

/^   : 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

Esto falló para XYZ @ 123 –

+5

@SarasArya add '@' en caracteres especiales. comenzará a funcionar. No es ciencia de cohetes! – mumair

2

que utilizar el siguiente script para un mínimo de 8 letras contraseña, con al menos un símbolo, letras mayúsculas y minúsculas y un número

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