javascript - solo - validar la complejidad de las contraseñas c#
Validador de expresiones regulares de ASP.NET(fortaleza de la contraseña) (3)
Esto le dará 2 dígitos de minuto, 2 de carácter mínimo y mínimo de 8 caracteres ... Me niego a mostrarle cómo no permitir que los usuarios tengan caracteres no alfanuméricos en sus contraseñas, ¿por qué los sitios quieren aplicar contraseñas menos seguras?
^(?=.*/d{2})(?=.*[a-zA-Z]{2}).{8,}$
Tengo un control de validación que tiene la siguiente expresión:
(?=(.*//d.*){2,})(?=(.*//w.*){2,})(?=(.*//W.*){1,}).{8,}
Es una contraseña con al menos 2 dígitos , 2 caracteres alfabéticos , 1 no alfanumérico y 8 caracteres como mínimo . Lamentablemente, esto no parece ser compatible con varios navegadores.
Esta validación funciona perfectamente en Firefox, pero no en Internet Explorer.
Una combinación de cada una de sus respuestas da como resultado:
var format = "^(?=.{" + minLength + ",})" +
(minAlpha > 0 ? "(?=(.*[A-Za-z].*){" + minAlpha + ",})" : "") +
(minNum > 0 ? "(?=(.*[0-9].*){" + minNum + ",})" : "") +
(minNonAlpha > 0 ? "(?=(.*//W.*){" + minNonAlpha + ",})" : "") + ".*$";
EX: "^(?=.{x,})(?=(.*[A-Za-z].*){y,})(?=(.*[0-9].*){z,})(?=(.*/W.*){a,}).*$"
La pieza importante es tener el (?. {X,}) para la longitud primero .
(?=(.*/W.*){0,})
no son 0 caracteres no alfanuméricos. Tiene al menos 0 caracteres no alfanuméricos. Si desea que la contraseña no contenga ningún carácter no alfanumérico, puede hacerlo (?!.*/W)
o (?=/w*$)
.
Una solución más simple sería omitir el /W
look-ahead, y usar /w{8,}
lugar de .{8,}
.
Además, /w
incluye /d
. Si solo quería el alfa, podría hacer [^/W/d]
o [A-Za-z]
.
/^(?=(?:.*?/d){2})(?=(?:.*?[A-Za-z]){2})/w{8,}$/
Esto validaría la contraseña para contener al menos dos dígitos , dos alfas , tener al menos 8 caracteres de longitud y contener solo caracteres alfanuméricos (incluido el subrayado).
-
/w
=[A-Za-z0-9_]
-
/d
=[0-9]
-
/s
=[ /t/n/r/f/v]
Editar: para usar esto en todos los navegadores, probablemente necesites hacer algo como esto:
var re = new RegExp("^(?=(?:.*?//d){2})(?=(?:.*?[A-Za-z]){2})//w{8,}$");
if (re.test(password)) { /* ok */ }
Edit2: la reciente actualización de la pregunta casi invalida mi respuesta completa. ^^;;
Debería poder utilizar el código JavaScript al final, si reemplaza el patrón con el que tenía originalmente.
Edit3: OK. Ahora entiendo a qué te refieres.
/^(?=.*[a-z].*[a-z])(?=.*[0-9].*[0-9]).{3,}/.test("password123") // matches
/^(?=.*[a-z].*[a-z])(?=.*[0-9].*[0-9]).{4,}/.test("password123") // does not match
/^(?=.*[a-z].*[a-z]).{4,}/.test("password123") // matches
Parece que (?= )
No es realmente de ancho cero en Internet Explorer.
http://development.thatoneplace.net/2008/05/bug-discovered-in-internet-explorer-7.html
Edit4: Más lecturas: http://blog.stevenlevithan.com/archives/regex-lookahead-bug
Creo que esto puede resolver su problema:
/^(?=.{8,}$)(?=(?:.*?/d){2})(?=(?:.*?[A-Za-z]){2})(?=(?:.*?/W){1})/
new RegExp("^(?=.{8,}$)(?=(?:.*?//d){2})(?=(?:.*?[A-Za-z]){2})(?=(?:.*?//W){1})")
El (?=.{8,}$)
tiene que ser lo primero.
¿Qué tal uno de los validadores de contraseñas basados en jQuery existentes? Como: http://scripts.simplythebest.net/4/Ajax-Password-Strength-Meter-software.html