regulares - javascript regex para la contraseña que contiene al menos 8 caracteres, 1 número, 1 superior y 1 minúscula
validar contraseña javascript expresiones regulares (4)
Esta pregunta ya tiene una respuesta aquí:
Intento escribir una expresión regular para validar una contraseña que debe cumplir los siguientes criterios:
- Contiene al menos 8 caracteres
- contener al menos 1 número
- contener al menos 1 carácter minúsculo (az)
- contener al menos 1 carácter en mayúscula (AZ)
- contiene solo 0-9a-zA-Z
Intenté lo siguiente, pero parece que no funciona.
http://jsfiddle.net/many_tentacles/Hzuc9/
<input type=''button'' value=''click'' class=''buttonClick'' />
<input type=''text'' />
<div></div>
y...
$(".buttonClick").click(function () {
if ($("input[type=text]").filter(function () {
return this.value.match(/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])([a-zA-Z0-9]{8})$/);
})) {
$("div").text("pass");
} else {
$("div").text("fail");
}
});
¿Algunas ideas?
Al menos 8 = {8,}
:
str.match(/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])([a-zA-Z0-9]{8,})$/)
Su expresión regular debería verse así:
/^(?=.*/d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,}$/
Aquí hay una explicación:
/^
(?=.*/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
$/
Su expresión regular solo permite exactamente 8 caracteres. Use {8,}
para especificar ocho o más en lugar de {8}
.
Pero, ¿por qué limitarías el rango de caracteres permitido para tus contraseñas? Las contraseñas alfanuméricas de 8 caracteres pueden ser reforzadas por mi teléfono en cuestión de minutos.
Usar expresiones regulares individuales para probar las diferentes partes sería considerablemente más fácil que tratar de obtener una sola expresión regular para cubrir todas ellas. También hace que sea más fácil agregar o quitar los criterios de validación.
Tenga en cuenta también que su uso de .filter()
era incorrecto; siempre devolverá un objeto jQuery (que se considera verdad en JavaScript). Personalmente, utilizaría un bucle .each()
para iterar sobre todas las entradas e informar los estados individuales de aprobación / falla. Algo como el siguiente:
$(".buttonClick").click(function () {
$("input[type=text]").each(function () {
var validated = true;
if(this.value.length < 8)
validated = false;
if(!//d/.test(this.value))
validated = false;
if(!/[a-z]/.test(this.value))
validated = false;
if(!/[A-Z]/.test(this.value))
validated = false;
if(/[^0-9a-zA-Z]/.test(this.value))
validated = false;
$(''div'').text(validated ? "pass" : "fail");
// use DOM traversal to select the correct div for this input above
});
});