É vantajoso o uso de ParseInt para validar números?

A utilização do parseInt para validar números em muitos casos não é a solução mais efetiva, devido a que permite a presença de letras e/ou espaços, e o resultado poderia não ser o esperado.

Por José Antonio Jiménez Garelli


Publicado em: 31/3/08
Valorize este artigo:
A utilização do parseInt para validar números em muitos casos não costuma ser a solução mais efetiva, devido a que permite a presença de letras e/ou espaços, e o resultado poderia não ser o esperado.

Por que parseInt pode causar problemas?

Esta pergunta se responde a si mesma vendo vários exemplos sobre o funcionamento de parseInt:

  • "123456": este String retorna como resultado o número 123456 o qual é o resultado esperado.
  • "123456asd": este String retorna como resultado o número 123456 apesar de que o String continha letras (vantagem ou desvantagem?).
  • "asd": este String retorna como resultado NaN o qual é o resultado esperado.
  • "": este String vazio retorna como resultado NaN o qual é o resultado esperado.
  • " 123456asd": este String (que contém vários espaços no início do número e letras no final) retorna como resultado o número 123456 (vantagem ou desvantagem?).
  • " 123 123 asd" este String (que contém espaços e letras) retorna como resultado o número 123 (vantagem ou desvantagem?).

Como se pode observar, parseInt apresenta o seguinte comportamento:

  1. Retornará um número válido si: O String começa por um número.
  2. O String começa por espaço(s) seguido de um número.
    • Exemplos de números válidos: "123456"
    • " 123456"
    • "12345asdasd"
    • " 12345 asdd"
  3. Todo String que cumpra com as 2 regas anteriores (ser um número válido), será truncado: quando se encontre uma letra, espaço ou caracteres especiais (vírgulas, acentos,...) dentro do String. Como resultado, retornará os dígitos que estejam mais à esquerda da primeira letra (espaço ou caractere) encontrada.
    • Exemplos de números válidos truncados: "123456" retorna como resultado 123456
    • " 123456" retorna como resultado 123456
    • "12345asdasd" retorna como resultado 12345
    • " 123.. asdd" retorna como resultado 123

Uma alternativa ao parseInt, que valida que os String contenham só números está a seguir:

function validarNumero(c_numero)
{
   //checar a longitude de c_numero:
   // Si (c_numero.length é igual a Zero) quer dizer que c_numero é uma cadeia Vazia.
   // Se (c_numero.length é diferente(maior) de Zero) podemos assegurar que c_numero contém pelo menos uma letra
   //a qual se pode fazer a validação
   if (c_numero.length == 0)
   {
       return "NaN";
   }
   else
   {
       //Percorre-se c_numero por todos seus caracteres checando que todos sejam dígitos
       //a condição >="0" e <="9" é baseada no valor ascii que têm os números na tabela ascii.
       //Se algum dos caracteres não for um número a função retornará um NaN
       //Senão retornará o Número
       for (i = 0; i < c_numero.length; i++)
       {
          if (!((c_numero.charAt(i) >= "0") && (c_numero.charAt(i) <= "9")))
          return "NaN";
       }
       return c_numero;
   }
}

Exemplos de validação de números

utilizando a função ParseInt:
Resultado de aplicar a função:



utilizando a função validarNumero (chamando à função validar):
Resultado de aplicar a função:



utilizando a função validarNumero (chamando à função validarComplexo):
Resultado de aplicar a função:






Usuários :    login / registro
Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato