Qual é o regex para garantir que uma determinada sequência contenha pelo menos um caractere de cada uma das seguintes categorias.
- Caracter em minúsculas
- Caractere maiúsculo
- Dígito
- Símbolo
Eu sei que os padrões para conjuntos individuais ou seja [a-z]
, [A-Z]
, \d
e _|[^\w]
(eu tenho-os corrigir, não é?).
Mas como combiná-los para garantir que a string contenha tudo isso em qualquer ordem?
Respostas:
Se você precisar de uma única regex, tente:
Uma breve explicação:
E eu concordo com o SilentGhost,
\W
pode ser um pouco amplo. Eu o substituiria por um conjunto de caracteres como este:[-+_!@#$%^&*.,?]
(fique à vontade para adicionar mais, é claro!)fonte
.+
para.*
? Não pude apresentar um caso de teste que falhe.*
. Eles são iguais neste contexto? "Zero ou mais caracteres" parece estar bem - apenas buscando confirmação..+
para.*
ou mesmo.{4,}
para esse assunto.^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?!.*[&%$]).{6,}$
Bart Kiers, seu regex tem alguns problemas. A melhor maneira de fazer isso é:
Desta forma, você está pesquisando, não importa se no começo, no final ou no meio. No seu caso, tenho muitos problemas com senhas complexas.
fonte
Você pode combinar esses três grupos separadamente e verifique se todos estão presentes. Além disso,
[^\w]
parece um pouco amplo demais, mas se é isso que você deseja, poderá substituí-lo\W
.fonte
\W
e[\W]
resultar no mesmo.