Vamos pegar uma senha como uma combinação de caracteres alfanuméricos junto com caracteres especiais e verificar se a senha é válida ou não com a ajuda de algumas condições.

As condições para uma senha válida são:

  1. Deve ter pelo menos um número.
  2. Deve ter pelo menos um caractere maiúsculo e um minúsculo.
  3. Deve ter pelo menos um símbolo especial.
  4. Deve ter entre 6 a 20 caracteres.
Entrada:   Geek12 #
 Saída: A senha é válida.
Entrada:   asd123
 Saída: Senha inválida !!

Podemos verificar se uma determinada string é elegível para ser uma senha ou não de várias maneiras.

Método # 1: Método ingênuo (sem usar Regex).

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 
def main(): 
    passwd = 'Geek12@'
      
    if (password_check(passwd)): 
        print("Password is valid") 
    else: 
        print("Invalid Password !!") 
          
if __name__ == '__main__': 
    main() 
Resultado:

Senha é válida

Este código usa funções booleanas para verificar se todas as condições foram satisfeitas ou não. Vemos que embora a complexidade do código seja básica, o comprimento é considerável.
 
Método 2: usando regex

compile()O método do módulo Regex cria um objeto Regex, tornando possível executar funções regex na variável pat . Em seguida, verificamos se o padrão definido por pat é seguido pela string de entrada passwd . Nesse caso, o método de pesquisa retorna verdadeiro , o que permitiria que a senha fosse válida.

import re 
  
def main(): 
    passwd = 'Geek12@'
    reg = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!#%*?&]{6,20}$"
      
    
    pat = re.compile(reg) 
      
    
    mat = re.search(pat, passwd) 
      
    
    if mat: 
        print("Password is valid.") 
    else: 
        print("Password invalid !!") 
if __name__ == '__main__': 
    main() 
Resultado:
A senha é válida.