`` `regex
^(? =.*[a-z]) (? =.*[a-z]) (? =.*\ d) (? =.*[!@#$%^&*() _+{} \ [\]:;; <> ,.? ~ \\/-]). {8,} $
`` `
Aqui está um colapso do regex e como ele atende aos requisitos:
* `^`:Corresponde ao início da string.
* `(? =.* [a-z])`:
lookahead positivo - Garante que haja pelo menos uma letra minúscula (`[a-z]`). `.*` corresponde a qualquer caractere (exceto newline) zero ou mais vezes, por isso diz essencialmente "em algum lugar da corda, deve haver uma letra minúscula". O lookahead * não consome * nenhum caractere; apenas verifica uma condição.
* `(? =.* [A-z])`:
lookahead positivo - Garante que haja pelo menos uma letra em maiúsculas (`[a-z]`).
* `(? =.* \ d)`:
lookahead positivo - garante que haja pelo menos um dígito (`\ d`).
*`(? =.*[!@#$%^&*() _+{} \ [\]:; - Garante que haja pelo menos um personagem especial da lista fornecida.
IMPORTANTE: Pode ser necessário ajustar os caracteres dentro dos colchetes, dependendo dos personagens que você considera "especial". A barra de barriga `\` é usada para escapar de caracteres especiais como ``, `[`, `]`, `/`, `` 'e `` `, então eles são tratados literalmente. (Uma barra de barragem dupla `\\` é necessária em muitas linguagens de programação 'String literais para representar uma única barra de barriga no regex.) Se você deseja permitir mais ou diferentes caracteres especiais, modifique essa parte de acordo.
* `. {8,}`:corresponde a qualquer caractere (exceto newline) pelo menos 8 vezes. Esta é a parte principal que corresponde aos caracteres de senha reais, depois que os LookaHeads confirmaram a presença dos elementos necessários.
* `$`:Corresponde ao final da string. Isso garante que a string * inteira * corresponda aos critérios.
Explicação de LookaHeads: A chave para este regex é o uso de * lookaheads positivos * (`(? =...)`). Os lookheads permitem afirmar que existe um certo padrão * sem realmente consumir * os caracteres que correspondem ao padrão. Isso é crucial porque você precisa verificar a presença de diferentes tipos de caracteres (minúsculas, maiúsculas, dígitos, especiais) de forma independente e, em seguida, verifique se o comprimento total é de pelo menos 8.
Como usá -lo (exemplo em python): `` `Python
importar re
senha_regex =r "^(? =.*[a-z]) (? =.*[a-z]) (? =.*\ d) (? =.*[!@#$%^&*() _+{} \ [\] :;
def is_valid_password (senha):
Retorne bool (re.match (senha_regex, senha))
casos de teste
Senhas =[
"StrongPass1!", # Válido
"Frawpass1", # inválido (sem maiúsculas)
"Fracaspass1", # inválido (sem minúsculas)
"StrongPass", # inválido (sem dígito, especial)
"Strngp1", # inválido (muito curto)
"StrongPass1", # inválido (sem especial)
"StrongPass1", # inválido (sem espaço especial, no final)
"Strongpass_1", # válido
"StrongPass.1", # válido
"StrongPass, 1", # válido
"StrongPass ~ 1", # válido
"LongoValidPasswordWith1!", # Válido
]
Para senha em senhas:
print (f "senha:{senha}, válido:{is_valid_password (senha)}")
`` `
Considerações importantes: *
Segurança: Esse regex é um ponto de partida, mas confiar apenas em expressões regulares para segurança de senha geralmente não é recomendado. Considere o uso de algoritmos estabelecidos de hash de senha (como BCRYPT, SCRYPT ou ARGON2) para armazenar senhas com segurança.
*
caracteres especiais: O `[!@#$%^&*() _+{} \ [\]:; <> ,.? ~ \\/-]` A parte define o que você considera um caractere "especial". Ajuste -o para corresponder ao conjunto de caracteres desejado.
*
Unicode: Se você precisar suportar caracteres Unicode (por exemplo, senhas com letras ou caracteres acentuados de outros idiomas), pode ser necessário modificar um pouco o regex (por exemplo, usando classes de caracteres Unicode como `\ p {ll}` para letras minúsculas).
*
Complexidade: Expressões regulares muito complexas às vezes podem ser ineficientes. Embora este geralmente seja bom para validação de senha, esteja atento ao desempenho se você estiver lidando com um enorme volume de senhas.
*
Experiência do usuário: Forneça mensagens de erro claras e úteis aos usuários quando sua senha não atender aos requisitos. Não diga apenas "senha inválida"; Diga a eles exatamente o que está faltando.
Essa explicação abrangente e o exemplo do Python devem fornecer uma sólida compreensão de como usar esse regex e como adaptá -lo às suas necessidades específicas. Lembre -se de priorizar práticas seguras de manuseio de senha.