Expresión regular de contraseña (al menos 2 dígitos y un carácter especial y una longitud mínima de 8)

He estado buscando expresiones regulares que acepten al menos dos dígitos y un carácter especial y la longitud mínima de la contraseña es 8. Hasta ahora, he hecho lo siguiente: [0-9a-zA-Z!@#$%0-9]*[!@#$%0-9]+[0-9a-zA-Z!@#$%0-9]*

Algo como esto debería hacer el truco.

 ^(?=(.*\d){2})(?=.*[a-zA-Z])(?=.*[!@#$%])[0-9a-zA-Z!@#$%]{8,} (?=(.*\d){2}) - uses lookahead (?=) and says the password must contain at least 2 digits (?=.*[a-zA-Z]) - uses lookahead and says the password must contain an alpha (?=.*[!@#$%]) - uses lookahead and says the password must contain 1 or more special characters which are defined [0-9a-zA-Z!@#$%] - dictates the allowed characters {8,} - says the password must be at least 8 characters long 

Podría necesitar un pequeño ajuste, por ejemplo, especificando exactamente qué personajes especiales necesitas, pero debería ser el truco.

No hay ninguna razón, en absoluto, para implementar todas las reglas en una sola expresión regular. Considera hacerlo así:

 Pattern[] pwdrules = new Pattern[] { Pattern.compile("........"), // at least 8 chars Pattern.compile("\d.*\d"), // 2 digits Pattern.compile("[-!"§$%&/()=?+*~#'_:.,;]") // 1 special char } String password = ......; boolean passed = true; for (Pattern p : pwdrules) { Matcher m = p.matcher(password); if (m.find()) continue; System.err.println("Rule " + p + " violated."); passed = false; } if (passed) { .. ok case.. } else { .. not ok case ... } 

Esto tiene el beneficio adicional de que las reglas de passwort se pueden agregar, eliminar o cambiar sin esfuerzo. Incluso pueden residir en algún archivo de recursos.

Además, es simplemente más legible.

Prueba esta expresión regular Utiliza la función de búsqueda anticipada para verificar que haya al menos dos dígitos y uno de los caracteres especiales enumerados por usted.

 ^(?=.*?[0-9].*?[0-9])(?=.*[!@#$%])[0-9a-zA-Z!@#$%0-9]{8,}$ 

EXPLICACIÓN

 ^ #Match start of line. (?=.*?[0-9].*?[0-9]) #Look ahead and see if you can find at least two digits. Expression will fail if not. (?=.*[!@#$%]) #Look ahead and see if you can find at least one of the character in bracket []. Expression will fail if not. [0-9a-zA-Z!@#$%0-9]{8,} #Match at least 8 of the characters inside bracket [] to be successful. $ # Match end of line. 

Prueba este:

 ^(?=.*\d{2,})(?=.*[$-/:-?{-~!"^_`\[\]]{1,})(?=.*\w).{8,}$ 

Así es como funciona en breve:

  • (?=.*\d{2,}) esta parte diciendo excepto al menos 2 dígitos
  • (?=.*[$-/:-?{-~!"^_ []] {1,})` estos son caracteres especiales, al menos 1
  • (?=.*\w) y el rest son letras (es igual a [A-Za-z0-9_] )
  • .{8,}$ este dice al menos 8 caracteres, incluidas todas las reglas anteriores. Debajo está el mapa para la expresión regular actual (hecha con la ayuda de Regexper ) Mapa Regexp UPD

Regexp debería verse así ^(?=(.*\d){2,})(?=.*[$-\/:-?{-~!"^_'\[\]]{1,})(?=.*\w).{8,}$ Revisa los comentarios para más detalles.

Pruebe esto: ^.*(?=.{8,15})(?=.*\d)(?=.*\d)[a-zA-Z0-9!@#$%]+$

Por favor, lea el siguiente enlace para hacer política de expresión regular de contraseña:

Expresión Regex para reglas de contraseña

Las expresiones regulares definen una estructura en la cadena que intentas emparejar. A menos que defina una estructura espacial en su expresión regular (por ejemplo, al menos dos dígitos seguidos de un carácter especial, seguido de … ) no puede usar una regex para validar su cadena.