Hola, tengo una verificación de seguridad de contraseña en PHP. que se parece a esto:
public static function validPass($candidate) { $r1 = '/[AZ]/'; //1 upper $r2 = '/[az]/'; //2 lower $r3 = '/[!@#$%^&*()\-_=+{}:<.>]/'; //1 special char $r4 = '/[0-9]/'; //1 number //no space if (preg_match('/\s/',$candidate)) { return false; } if (preg_match_all($r1, $candidate, $o) < 1) { return false; } if (preg_match_all($r2, $candidate, $o) < 1) { return false; } if (preg_match_all($r3, $candidate, $o) < 1) { return false; } if (preg_match_all($r4, $candidate, $o) < 1) { return false; } return true; }
entonces 1 mayúscula, 1 minúscula, 1 número, 1 carácter especial y no se permiten espacios
ahora estoy usando un validador de javascript para la interfaz y la única característica personalizada que puedo agregar para la contraseña es agregar una expresión regular, así que tengo que construir esto en una expresión regular. Probé y tengo hasta ahora:
^(?=.*[^a-zA-Z])(?=.*[az])(?=.*[AZ])$
pero no sé cómo abordar esto. ¿Cuál es la mejor manera de realizar estas comprobaciones en una expresión regular?
Su patrón ^(?=.*[^a-zA-Z])(?=.*[az])(?=.*[AZ])$
es un ejemplo de una expresión regular que nunca coincidirá porque, con anticipación , necesita al menos 1 letra que no sea letra, mayúsculas y minúsculas, pero el patrón de consumo solo coincide con una cadena vacía.
Puede usar una sola expresión regular como
^(?=.*[AZ])(?=.*[az])(?=.*[!@#$%^&*()_=+{}:<.>-])(?=.*[0-9])\S*$
Si necesita establecer un número mínimo de caracteres, reemplace el último *
con un cuantificador limitante, por ejemplo, {8,}
para requerir al menos 8 caracteres.
Vea la demostración de expresiones regulares .
Detalles :
^
- comienzo de la cadena(?=.*[AZ])
- al menos una mayúscula(?=.*[az])
- - al menos una minúscula(?=.*[!@#$%^&*()_=+{}:<.>-])
- al menos un carácter especial(?=.*[0-9])
- al menos un dígito\S*
- 0 o más caracteres que no sean espacios en blanco$
- fin de cadenas.