Ejercicio de RegEx #5: Validación de contraseñas

Escribe tres expresiones regulares que se pasarán a re.match() para comprobar la solidez de una contraseña:

  • Una llamada invalid que coincida con una contraseña si tiene menos de 6 caracteres o más de 30 caracteres, si contiene cualquier carácter no permitido o si no contiene al menos un carácter de cada categoría.
  • Una llamada weak que coincida con una contraseña válida que o bien tenga entre 6 y 15 caracteres o bien contenga menos de tres caracteres de cada categoría.
  • Una llamada strong que coincida con una contraseña válida de entre 16 y 30 caracteres y que contenga al menos tres caracteres de cada categoría.

Categorías

  • Minúsculas: todas las letras minúsculas de "a" a "z".
  • Mayúsculas: todas las letras mayúsculas de "A" a "Z".
  • Números: todos los dígitos del 0 al 9.
  • Símbolos: todos los símbolos siguientes !"#$%&'()*+,-./:;<=>?@[\]^_\{|}

Caracteres no permitidos

Espacios, tabulaciones, saltos de línea y cualquier otro carácter que no pertenezca a una de las cuatro categorías.

Ejemplo

# There are four invalid, four weak and four strong passwords (in that order).

passwords = [
    r'a3%Z',
    r'qwerty123456666666666666666666',
    r'sjfajfewjrjiodjfsrw0998(*(8q9432-4dfjsoijfj3))',
    r'this is an   invalid password',
    r'3d/-\b1T',
    r'This1s4VeryVeryl0n6Pa$$word',
    r'AAaa11&&',
    r'yFtZaqR%eN3nsu8VvxqK!LDfxbCnj',
    r'S*=7v!7rM5k!H+)@',
    r'H#4qq2_j[T|R!(7:;.aT',
    r'AP6&Ju~=ec<?"zj#8frDq=\3{%^P$',
    r"1111aaaaA^AA;;;1111aaaaAAAA;;'"
]

invalid = "yourregularexpressionhere"
weak = "yourregularexpressionhere"
strong = "yourregularexpressionhere"

[bool(re.match(invalid, i)) for i in passwords] ➞ [True, True, True, True, False, False, False, False, False, False, False, False]
[bool(re.match(weak, i)) for i in passwords] ➞ [False, False, False, False, True, True, True, True, False, False, False, False]
[bool(re.match(strong, i)) for i in passwords] ➞ [False, False, False, False, False, False, False, False, True, True, True, True]

Notas

  • No necesitas escribir una función, solo el patrón.
  • No elimines import re del código.
  • Encuentra más información sobre RegEx en Recursos.
  • Puedes encontrar todos los desafíos de esta serie aquí.