Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
([a-z]*){2}
([A-Z]*){2}
([\d]*){2}
Assim vai funcionar!
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:
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.
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.
Opa Realmente seria necessário o . antes o *
Como o Henrique Barcelos disse,pois se não estaria procurando pelo caractere especifico de * e não qualquer carácter.
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...
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.
Olá amigo, tudo bem?
Amigo, não sei bem como lhe ajudar, porém tenho um link que talvez lhe ajude: http://www.marketingtechblog.com/javascript-password-strength/
Espero ter ajudado, Att. Henrique Foletto.