validar solo segura regulares regular letras las expresiones expresion contraseñas contraseña complejidad javascript asp.net regex validation

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.