Controle de caracteres distintos em JavaScript

Mais um dia de trabalho, estava eu programando a aplicacao web de um cliente, quando precisei implementar um controle de senha de usuario, mas desta vez um pouco mais elaborado. A senha deve obedecer as seguintes regras:

  • Mínimo de 12 caracteres
  • Letras e números
  • Pelo menos 6 caracteres distintos

Os dois primeiros requisitos sao comuns e mais simples de se implementar, por exemplo:

senha.length < 12

para verificar o comprimento da senha, e

var regex = /[0-9][a-z]/i;
regex.test(senha);

para verificar se a senha eh formada por letras e numeros.

Buenas, entao troquei uma ideia com o meu amigo Diego, sobre uma expressao regular que fizesse a verificacao de caracteres nao repetidos em uma string qualquer. Alguns minutos de pesquisa do Google, documentacoes e e-books, entao desisti e parti para o bom e velho FOR :-) Depois de alguns minutos, saiu isso:

var i, j, distintos = "", jaTemCaractere = false;

for (i = 0; i < senha.length; i++) {
   for (j = 0; j < distintos.length; j++) {
      if (senha.substr(i, 1) == distintos.substr(j, 1)) {
         jaTemCaractere = true;
         break;
      }
   }

   if (!jaTemCaractere) {
      distintos = distintos + senha.substr(i, 1);
   }

   jaTemCaractere = false;
}

if (distintos.length < 6) {
   ret = false;
}

No proximo post sobre JavaScript vou compartilhar uma abordagem bem simples e direta para validacao de campos obrigatorios.

Leave a Reply