RegEx para asegurarse de que la cadena contiene al menos un carácter en minúscula, mayúscula, dígito y símbolo

¿Cuál es la expresión regular para asegurarse de que una cadena dada contenga al menos un carácter de cada una de las siguientes categorías.

  • Minúscula
  • Carácter mayúsculo
  • Dígito
  • Símbolo

Conozco los patrones para conjuntos individuales, a saber [az] , [AZ] , \d y _|[^\w] (los entendí correctamente, ¿verdad?).

Pero, ¿cómo los combino para asegurarme de que la cadena contiene todos estos en cualquier orden?

Si necesita una sola expresión regular, intente:

 (?=.*\d)(?=.*[az])(?=.*[AZ])(?=.*\W) 

Una breve explicación:

 (?=.*[az]) // use positive look ahead to see if at least one lower case letter exists (?=.*[AZ]) // use positive look ahead to see if at least one upper case letter exists (?=.*\d) // use positive look ahead to see if at least one digit exists (?=.*\W]) // use positive look ahead to see if at least one non-word character exists 

Y estoy de acuerdo con SilentGhost, \W podría ser un poco amplio. Lo reemplazaría con un juego de caracteres como este: [-+_!@#$%^&*.,?] (¡Siéntase libre de agregar más, por supuesto!)

Puede unir esos tres grupos por separado y asegurarse de que todos estén presentes. Además, [^\w] parece demasiado amplio, pero si eso es lo que desea, puede reemplazarlo por \W

Bart Kiers, tu expresión regular tiene un par de problemas. La mejor manera de hacerlo es esto:

 (.*[az].*) // For lower cases (.*[AZ].*) // For upper cases (.*\d.*) // For digits 

De esta manera estás buscando no importa si al principio, al final o en el medio. En tu caso tengo muchos problemas con contraseñas complejas.