Meus critérios de força da senha são os seguintes:
- Comprimento de 8 caracteres
- 2 letras em maiúsculas
- 1 Caráter Especial
(!@#$&*)
- 2 numerais
(0-9)
- 3 letras em minúsculas
Alguém pode me dar regex para o mesmo. Todas as condições devem ser atendidas por senha.
password
ehello123
são senhas válidas!").Respostas:
Você pode fazer essas verificações usando declarações positivas de antecipação:
Link Rubular
Explicação:
fonte
n
, substituir.{8}
com.{n,}
Você pode usar antecipações positivas de comprimento zero para especificar cada uma de suas restrições separadamente:
Se o mecanismo regex não suportar a
\p
notação e o ASCII puro for suficiente, você poderá substituir\p{Lu}
por[A-Z]
e\p{Ll}
com[a-z]
.fonte
As respostas dadas acima são perfeitas, mas sugiro usar várias expressões regulares menores, em vez de grandes.
A divisão do regex longo tem algumas vantagens:
Geralmente, essa abordagem mantém o código de fácil manutenção .
Dito isto, compartilho um pedaço de código que escrevo no Swift como exemplo:
fonte
Eu sugeriria adicionar
fonte
A solução do codaddict funciona bem, mas essa é um pouco mais eficiente: (sintaxe do Python)
As classes de caracteres negados consomem tudo até o caractere desejado em uma única etapa, exigindo zero retorno. (A solução dot star funciona muito bem, mas requer algum retorno.) Obviamente, com sequências curtas de destino, como senhas, essa melhoria de eficiência será insignificante.
fonte
(?#
e termina com a)
. Não há parênteses desequilibrados neste regex.fonte
A solução do @ codaddict funcionará.
Você também deve alterar algumas de suas regras para:
Com as melhorias acima, e para mais flexibilidade e legibilidade, eu modificaria o regex para.
Explicação básica
Explicação detalhada
E, finalmente, para fins de teste, aqui está um robulink com a regex acima
fonte
Para PHP, isso funciona bem!
neste caso, o resultado é verdadeiro
Thsks for @ridgerunner
fonte
return preg_match("/^(?=(?:[^A-Z]*[A-Z]){2})(?=(?:[^0-9]*[0-9]){2}).{8,}$/", 'CaSu4Li8')
?Outra solução:
fonte
A senha deve atender a pelo menos três das quatro regras de complexidade a seguir,
[pelo menos 1 caractere em maiúscula (AZ) pelo menos 1 caractere em minúscula (az) pelo menos 1 dígito (0-9) pelo menos 1 caractere especial - não se esqueça de tratar o espaço como caracteres especiais também]
pelo menos 10 caracteres
no máximo 128 caracteres
não mais que 2 caracteres idênticos seguidos (por exemplo, 111 não permitido)
'^ (?!. (.) \ 1 {2}) ((? =. [Az]) (? =. [AZ]) (? =. [0-9]) | (? =. [Az] ) (? =. [AZ]) (? =. [^ A-zA-Z0-9]) | (? =. [AZ]) (? =. [0-9]) (? =. [^ A -zA-Z0-9]) | (? =. [az]) (? =. [0-9]) (? =. * [^ a-zA-Z0-9])). {10,127} $ '
(?!. * (.) \ 1 {2})
(? =. [az]) (? =. [AZ]) (? =. * [0-9])
(? =. [az]) (? =. [AZ]) (? =. * [^ a-zA-Z0-9])
(? =. [AZ]) (? =. [0-9]) (? =. * [^ A-zA-Z0-9])
(? =. [az]) (? =. [0-9]) (? =. * [^ a-zA-Z0-9])
. {10.127}
fonte
Infelizmente, toda a regex acima não funcionou para mim. As regras básicas de uma senha forte são
Então, o Best Regex seria
O regex acima tem um comprimento mínimo de 8. Você pode alterá-lo de {8,} para { any_number ,}
Modificação nas regras?
digamos que você queira um mínimo de x caracteres minúsculos, y caracteres maiúsculos, z caracteres, número total mínimo de comprimento w . Em seguida, tente abaixo da regex
Nota: Altere x , y , z , w na expressão regular
Editar: resposta regex atualizada
Edit2: modificação adicionada
fonte
12345678
Tem certeza de que é uma senha forte ? Por favor, tente sua regex antes de postar.