Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Miguel Laforet

Expressão regular

Recommended Posts

Galera, to fazendo um script para força de senha, mas n sei fazer um detalhe (talvez o mais importante).

 

eu fiz assim:

 

var senhaObj =  $("input[name=f_senha]").val();
var senhaConfirmarObj = $("input[name=f_senha_confirma]").val();;

var senhaRegex1 = /[a-z]{2}/;
var senhaRegex2 = /[A-Z]{2}/;
var senhaRegex3 = /[\d]{2}/;

if(senhaObj == "" && senhaConfirmarObj == ""){
   removeError(false);
} else if(!senhaRegex1.test(senhaObj)){
   addError("Sua senha deve ter pelo menos 2 letras minúsculas.");
}else if(!senhaRegex2.test(senhaObj)){
   addError("Sua senha deve ter pelo menos 2 letras maiúsculas.");
}else if(!senhaRegex3.test(senhaObj)){
   addError("Sua senha deve ter pelo menos 2 números.");
}else if(senhaObj != senhaConfirmarObj){
   addError("Senhas diferentes.");
}else{
   removeError();
}

 

ou seja, a senha precisa conter 2 letras maiusculas, 2 minusculas e 2 numeros. eu testo cada requisito separado, para mostrar o que a senha do usuario precisa.

Mas com o esquema

[a-z]{2}

ele só da true se tiverem 2 letras juntas.

por exemplo, a senha AbcDe12 não valida, ele vai acusar como se ainda não tivesse letra maiuscula.

no lugar de

{2}

eu preciso colocar o que?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que uma senha nessas especificações deixa de ser uma Linguagem Regular, ou seja, não pode ser expressada por uma ER.

Você terá que fazer isso aí old fashion, procurando caractere por caractere, verificando na tabela ASCII se é letra (maiúscula ou minúscula) ou dígito.

 

Use o método String.charCodeAt para converter o caractere para ASCII (inteiro) e verifique os intervalos:

http://www.asciitable.com/

 

Cada vez que um caractere na especificação for encontrado, some um a uma variável específica para armazenar a qtde de caracteres daquela classe de caracteres.

Ex.:

var numMai = 0;
var numMin = 0;
var numDig = 0;

for(var i = 0; i < str.length; i++){
var charCode = str.charCodeAt(i);
if(charCode >= 48 && charCode <= 57){
   	numDig++;
}
if(charCode >= 65 && charCode <= 90){
   	numMai++;
}
if(charCode >= 97 && charCode <= 122){
   	numMin++;
}
}

if(numDig < 2 || numMai < 2 || numMin < 2){
alert('Sua senha deve conter ao menos 2 letras minúsculas, 2 letras maiúsculas e 2 dígitos);
}

 

A ideia é essa aí...

 

[a-z]*[a-z]

[A-Z]*[A-Z]

[\d]*[\d]

Assim vai funcionar!

Não funciona.

 

Assim talvez funcione:

[a-z].*[a-z]
[A-Z].*[A-Z]
[\d].*[\d]

Mas como eu falei, a linguagem em questão não é regular, o uso de ER aí só acarreta em perda de desempenho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoalmente eu acho que isso não é um "algoritmo" para força de senha. Isso soa mais como um validador de senha, o qual se torna opcional no cliente, afinal o Medidor de Força está aí para isso.

 

Uma "algoritmo" de força de senha deve operar com um score da senha informada. Você vai dando "pontos" para cada quesito cumprido pela senha informada e depois, no final, enquadra esse score em um intervalo previamente definido com os respectivos textos a serem exibidos.

 

Certa vez desenvolvi um desses que dava "pontos" caso a senha: Tivesse algum caracteres maiúsculo, tivesse letras E números, se tivesse caracteres não alfa-numéricos e etc.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Pessoalmente eu acho que isso não é um "algoritmo" para força de senha. Isso soa mais como um validador de senha, o qual se torna opcional no cliente, afinal o Medidor de Força está aí para isso.

Mas olha ali a função dele: 'addError', pelo que eu entendi, é validação mesmo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então ele não soube se expressar direito. Acredito que SRP que temos em Orientação a Objetos vale para esse caso também.

 

Ou o script é para medir a força da senha, ou é para validá-la.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.