javascript - segura - Contraseña REGEX con un mínimo de 6 caracteres, al menos una letra y un número y puede contener caracteres especiales
validar contraseña javascript regex (5)
Necesito una expresión regular con condición:
- min 6 caracteres, max 50 caracteres
- debe contener 1 letra
- debe contener 1 numero
- puede contener caracteres especiales como! @ # $% ^ & * () _ +
Actualmente tengo el patrón: (?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{6,50})$
Sin embargo, no permite caracteres especiales, ¿alguien tiene una buena expresión regular para eso?
Gracias
Verifique una contraseña de entre 7 y 16 caracteres que contenga solo caracteres, dígitos numéricos, subrayado y el primer carácter debe ser una letra-
/ ^ [A-Za-z] / w {7,14} $ /
Verifique una contraseña de entre 6 y 20 caracteres que contenga al menos un dígito numérico, una letra mayúscula y una letra minúscula
/ ^ (? =. / d) (? =. [az]) (? =. * [AZ]). {6,20} $ /
Verifique una contraseña de entre 7 y 15 caracteres que contenga al menos un dígito numérico y un carácter especial
/ ^ (? =. [0-9]) (? =. [! @ # $% ^ & ]) [A-zA-Z0-9! @ # $% ^ & ] {7,15} $ /
Verifique una contraseña de entre 8 y 15 caracteres que contenga al menos una letra minúscula, una letra mayúscula, un dígito numérico y un carácter especial
/ ^ (? =. / d) (? =. [az]) (? =. [AZ]) (? =. [^ a-zA-Z0-9]) (?!. * / s). { 8,15} $ /
Después de la respuesta de jfriend00, escribí este fiddle para probar su solución con algunos pequeños cambios para hacerlo más visual:
y este es el código:
checkPwd = function() {
var str = document.getElementById(''pass'').value;
if (str.length < 6) {
alert("too_short");
return("too_short");
} else if (str.length > 50) {
alert("too_long");
return("too_long");
} else if (str.search(//d/) == -1) {
alert("no_num");
return("no_num");
} else if (str.search(/[a-zA-Z]/) == -1) {
alert("no_letter");
return("no_letter");
} else if (str.search(/[^a-zA-Z0-9/!/@/#/$/%/^/&/*/(/)/_/+/./,/;/:]/) != -1) {
alert("bad_char");
return("bad_char");
}
alert("oukey!!");
return("ok");
}
por cierto, está funcionando como un encanto! ;)
Saludos y gracias a jfriend00 por supuesto!
Tal vez podría usarse una expresión regular, pero eso hace que sea difícil dar retroalimentación al usuario para la regla que no están siguiendo. Un enfoque más tradicional como este le brinda retroalimentación que puede usar en la interfaz de usuario para decirle al usuario qué regla pwd no se cumple:
function checkPwd(str) {
if (str.length < 6) {
return("too_short");
} else if (str.length > 50) {
return("too_long");
} else if (str.search(//d/) == -1) {
return("no_num");
} else if (str.search(/[a-zA-Z]/) == -1) {
return("no_letter");
} else if (str.search(/[^a-zA-Z0-9/!/@/#/$/%/^/&/*/(/)/_/+]/) != -1) {
return("bad_char");
}
return("ok");
}
Tengo una expresión regular, pero es un poco complicado.
^(?:(?<Numbers>[0-9]{1})|(?<Alpha>[a-zA-Z]{1})|(?<Special>[^a-zA-Z0-9]{1})){6,50}$
Déjeme explicarlo y cómo verificar si la contraseña probada es correcta:
Hay tres grupos nombrados en la expresión regular. 1) "Números": coincidirá con un solo número en la cadena. 2) "Alpha": coincidirá con un solo carácter de "a" a "z" o "A" a "Z" 3) "Special": coincidirá con un solo carácter que no sea "Alpha" o "Números"
Esos tres grupos nombrados se agrupan en un grupo alternativo, y {6,50}
recomienda a la máquina de expresiones regulares capturar al menos 6 de esos grupos mencionados anteriormente, pero no más de 50.
Para asegurarse de que se ingrese una contraseña correcta, debe verificar si hay una coincidencia, y después de eso, si los grupos coincidentes se capturan tanto como lo desea. Soy un desarrollador de C # y no sé cómo funciona en javascript, pero en C # tendrías que verificar:
match.Groups["Numbers"].Captures.Count > 1
Esperemos que funcione igual en javascript! ¡Buena suerte!
Un regex más elegante y autónomo para que coincida con estos requisitos de contraseña (comunes) es:
^(?=.*[A-Za-z])(?=.*//d)[A-Za-z//d^a-zA-Z0-9].{5,50}$
El toque elegante aquí es que no tiene que usar símbolos de código fijo como $ @ # etc. Para aceptar todos los símbolos, simplemente está diciendo: "acepte también todos los caracteres no alfanuméricos y no los números". La parte final de la expresión regular {5,50}
se puede cambiar fácilmente y corresponde al número mínimo y máximo de caracteres: en este ejemplo específico, hasta 5 caracteres, la expresión regular devuelve una no coincidencia (es decir, se requieren un mínimo de 6 caracteres para validar). Del mismo modo, después de 50 caracteres, también devuelve una no coincidencia.