Tomemos una contraseña como una combinación de caracteres alfanuméricos junto con caracteres especiales y verifiquemos si la contraseña es válida o no con la ayuda de algunas condiciones.
Las condiciones para una contraseña válida son:
- Debe tener al menos un número.
- Debe tener al menos un carácter en mayúscula y uno en minúscula.
- Debe tener al menos un símbolo especial.
- Debe tener entre 6 y 20 caracteres.
Input : Geek12# Output : Password is valid. Input : asd123 Output : Invalid Password !!
Podemos verificar si una string dada es elegible para ser una contraseña o no usando varias formas.
Método n. ° 1: método ingenuo (sin usar Regex).
# Password validation in Python # using naive method # Function to validate the password def password_check(passwd): SpecialSym =['$', '@', '#', '%'] val = True if len(passwd) < 6: print('length should be at least 6') val = False if len(passwd) > 20: print('length should be not be greater than 8') val = False if not any(char.isdigit() for char in passwd): print('Password should have at least one numeral') val = False if not any(char.isupper() for char in passwd): print('Password should have at least one uppercase letter') val = False if not any(char.islower() for char in passwd): print('Password should have at least one lowercase letter') val = False if not any(char in SpecialSym for char in passwd): print('Password should have at least one of the symbols $@#') val = False if val: return val # Main method def main(): passwd = 'Geek12@' if (password_check(passwd)): print("Password is valid") else: print("Invalid Password !!") # Driver Code if __name__ == '__main__': main()
Password is valid
Este código usaba funciones booleanas para comprobar si todas las condiciones se cumplían o no. Vemos que aunque la complejidad del código es básica, la longitud es considerable.
Método #2: Usar expresiones regulares
compile()
El método del módulo Regex crea un objeto Regex, lo que permite ejecutar funciones de expresiones regulares en la variable pat . Luego verificamos si el patrón definido por pat es seguido por la string de entrada passwd . Si es así, el método de búsqueda devuelve true , lo que permitiría que la contraseña sea válida.
# importing re library import re def main(): passwd = 'Geek12@' reg = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!#%*?&]{6,20}$" # compiling regex pat = re.compile(reg) # searching regex mat = re.search(pat, passwd) # validating conditions if mat: print("Password is valid.") else: print("Password invalid !!") # Driver Code if __name__ == '__main__': main()
Password is valid.