Quero uma expressão regular para verificar se:
Uma palavra-passe contenha, pelo menos, oito caracteres, incluindo, pelo menos, um número e inclui ambas as letras maiúsculas e inferiores e caracteres especiais, por exemplo #
, ?
,!
.
Não pode ser sua senha antiga ou conter seu nome de usuário, "password"
, ou"websitename"
E aqui está minha expressão de validação, que é para oito caracteres, incluindo uma letra maiúscula, uma letra minúscula e um número ou caractere especial.
(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"
Como escrevê-lo para uma senha deve ter oito caracteres, incluindo uma letra maiúscula, um caractere especial e caracteres alfanuméricos ?
fonte
Você pode usar esse regex com várias asserções de lookahead (condições) :
Este regex aplicará estas regras:
(?=.*?[A-Z])
(?=.*?[a-z])
(?=.*?[0-9])
(?=.*?[#?!@$%^&*-])
.{8,}
(com as âncoras)fonte
As expressões regulares não têm um operador AND, por isso é muito difícil escrever um regex que corresponda a senhas válidas, quando a validade é definida por algo E outra coisa E outra coisa ...
Mas, expressões regulares têm um operador OR, então aplique o teorema de DeMorgan e escreva um regex que corresponda a senhas inválidas:
Qualquer coisa com menos de oito caracteres OU qualquer coisa sem números OU qualquer coisa sem maiúsculas OU ou qualquer coisa sem minúsculas OU qualquer coisa sem caracteres especiais.
Assim:
Se algo corresponder a isso, é uma senha inválida.
fonte
|[a-zA-Z0-9]*
.Apenas uma pequena melhoria para a resposta de @ anubhava: Como os caracteres especiais são limitados aos do teclado, use-os para qualquer caractere especial:
^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$
Este regex aplicará estas regras:
fonte
\W
corresponde apenas a caracteres ASCII. Então você não mudou isso e agora precisa filtrar os caracteres de espaço em branco. Além disso, todos os parênteses e{1,}
quantificadores que você adicionou são ruído puro, e remover os?
operadores não gananciosos ( ) era inútil. Não há melhorias aqui.Tive alguma dificuldade em seguir a resposta mais popular para minhas circunstâncias. Por exemplo, minha validação falhou com caracteres como
;
ou[
. Eu não estava interessado em listar meus caracteres especiais em branco, então, em vez disso, aproveitei[^\w\s]
como teste - basta colocar - combinar caracteres que não sejam palavras (incluindo numéricos) e caracteres que não sejam espaços em branco. Para resumir, aqui está o que funcionou para mim ...8
caracteres1
caractere numérico1
letra minúscula1
letra maiúscula1
caráter especialJSFiddle Link - demo simples que abrange vários casos
fonte
(?=.*?[^\w\s])
com(?=.*?([^\w\s]|[_]))
adicionar suporte para sublinhados e ele funciona muito bem agora. Além disso, o @ Dinish.net, o sistema que eu uso retira o espaço em branco da string de senha quando a obtemos, portanto, usar o método vanilla JS String.prototype.trim () funcionaria bem se você quiser usar esta resposta.Uma versão mais "genérica" (?), Não permitindo letras em inglês como caracteres especiais .
fonte
Importar o arquivo JavaScript
jquery.validate.min.js
.Você pode usar este método:
fonte
Tente este:
Expressão:
Caracteres especiais opcionais:
Expressão:
Se a condição mínima e máxima não for necessária, remova
.{6, 16}
fonte
Não está respondendo diretamente à pergunta, mas realmente precisa ser uma regex?
Eu costumava fazer muito Perl e me acostumava a resolver problemas com expressões regulares. No entanto, quando eles ficam mais complicados com todas as expectativas e outras peculiaridades, você precisa escrever dezenas de testes de unidade para eliminar todos esses bugs.
Além disso, uma regex é tipicamente algumas vezes mais lenta que uma solução imperativa ou funcional.
Por exemplo, a seguinte função Scala (não muito FP) resolve a pergunta original cerca de três vezes mais rápido que o regex da resposta mais popular. O que ele faz também é tão claro que você não precisa de um teste de unidade:
fonte
Eu responderia a Peter Mortensen, mas não tenho reputação suficiente.
Suas expressões são perfeitas para cada um dos requisitos mínimos especificados. O problema com suas expressões que não exigem caracteres especiais é que eles também não permitem caracteres especiais; portanto, eles também impõem requisitos máximos, que não acredito que o OP solicitou. Normalmente, você deseja permitir que seus usuários tornem a senha deles tão forte quanto eles querem; por que restringir senhas fortes?
Portanto, sua expressão "mínimo de oito caracteres, pelo menos uma letra e um número":
^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$
atinge o requisito mínimo, mas os caracteres restantes podem ser apenas letras e números. Para permitir (mas não exigir) caracteres especiais, você deve usar algo como:
^(?=.*[A-Za-z])(?=.*\d).{8,}$
para permitir qualquer caractereou
^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d$@$!%*#?&]{8,}$
para permitir caracteres especiais específicosDa mesma forma, "no mínimo oito caracteres, pelo menos uma letra maiúscula, uma letra minúscula e um número:"
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$
atende a esse requisito mínimo, mas permite apenas letras e números. Usar:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$
para permitir qualquer caractereou
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d$@$!%*?&]{8,}
para permitir caracteres especiais específicos.fonte
fonte
|{}:;<>/])[A-Za-z\d$@$!%*?&+~
| {}:; <> /] {8,15}, que incluirá os seguintes caracteres não alfanuméricos: (@ $!% *? & + ~ `| {}:; <> /)Que tal considerar a seguinte solução regex:
^(?=.*[\w])(?=.*[\W])[\w\W]{8,}$
O que valida o seguinte:
Confira trabalhando no seguinte link https://regex101.com/r/qPmC06/4/
fonte
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[\W\_])[A-Za-z\d\W\_]{8,}$
?De acordo com sua necessidade, esse padrão deve funcionar muito bem. Tente isso,
Apenas crie uma variável de string, atribua o padrão e crie um método booleano que retorne true se o padrão estiver correto, ou false.
Amostra:
fonte
Eu encontrei muitos problemas aqui, então criei os meus.
Aqui está em toda a sua glória, com testes:
https://regex101.com/r/DCRR65/4/tests
Coisas a serem observadas:
\w
porque isso inclui_
, pelo qual estou testando.fonte
fonte
O @ClasG já sugeriu :
mas não aceita _ (sublinhado) como um caractere especial (por exemplo, Aa12345_).
Um melhor é:
fonte
Demo:
fonte
Testando este em 2020:
Verifique-se
fonte
fonte
Só podemos fazer isso usando HTML5.
Use o código abaixo no atributo pattern,
Funcionará perfeitamente.
fonte
Você pode usar o padrão de expressão regular abaixo para verificar a senha, se ela corresponde às suas expectativas ou não.
fonte
Verificação de link online https://regex101.com/r/mqGurh/1
fonte
Usa isto,
Ele validará pelo menos uma letra minúscula, uma maiúscula, um número e os caracteres especiais de (!, @, #, $,%,?, =, *, &).
O comprimento mínimo é 8 e o comprimento máximo é 20
fonte
Em Java / Android, para testar uma senha com pelo menos um número, uma letra, um caractere especial no seguinte padrão:
fonte
Tente o seguinte:
Essa expressão regular funciona para mim perfeitamente.
fonte
Padrão para corresponder a pelo menos 1 caractere maiúsculo, 1 dígito e qualquer caractere especial e o comprimento entre 8 e 63.
"^ (? =. [az]) (? =. [AZ]) (? =. * \ d) [a-zA-Z \ d \ W] {8,63} $"
Esse padrão foi usado para a programação JAVA.
fonte
Espero que o abaixo funcione. Eu tentei isso na política personalizada do Azure.
^ (? =. [az]) (? =. [AZ]) (? =. \ d) (? =. [@ # $% ^ & * -_ + = [] {} | \: ',? /
~"();!])([A-Za-z\d@#$%^&*\-_+=[\]{}|\\:',?/
~ "() ;!] |. (?! @)) {6,16} $fonte
Na verdade, eu apenas copiei a primeira resposta aqui e a transformei em um regex mais conveniente para a interface do usuário que precisa de um superior, um inferior e pelo menos 8 caracteres, mas aceita tudo "no meio".
Este é um exemplo-regex que requer
IMPORTANTE : Este regex também exceto todos os outros caracteres, como números, caracteres especiais como $, # ,! etc. - desde que as regras 1. a 3. correspondam à sequência de entrada
Cuidado com o "." no final da regex. Isso corresponderá a quase qualquer caractere (e pode ser legível)
fonte
Se você deseja usar expressões regulares para verificar no mínimo oito caracteres, pelo menos uma letra maiúscula, pelo menos uma letra minúscula, pelo menos um número de 0 a 9 e pelo menos um caractere especial de:! @ # $% ^ & * _? E também forneça ao usuário mais informações sobre o que está faltando na senha, você pode usar o seguinte código:
fonte
Uma solução que encontrei em uma das respostas anteriores como:
* Mínimo de 8 caracteres, pelo menos 1 alfabeto maiúsculo, 1 alfabeto minúsculo, 1 número e 1 caractere especial:
... não funcionou para mim, mas a seguinte é uma versão simplificada e funciona muito bem (adicione qualquer caractere especial que você goste, adicionei # aqui) e adicione a regra de número como faz com as letras como:
fonte