> Manuales > Taller de Javascript

La utilización del parseInt para validar números en muchos casos no resulta ser la solución más efectiva, debido a que permite la presencia de letras y/o espacios, y el resultado podría no ser el esperado.

La utilización del parseInt para validar números en muchos casos no resulta ser la solución más efectiva, debido a que permite la presencia de letras y/o espacios, y el resultado podría no ser el esperado.

¿Por qué parseInt puede causar problemas?

Esta pregunta se responde a sí misma viendo varios ejemplos sobre el funcionamiento de parseInt:


Como se puede observar, parseInt presenta el siguiente comportamiento:

  1. Retornará un número válido si: El String empieza por un número.
  2. El String empieza por espacio(s) seguido de un número.
    • Ejemplos de números válidos: "123456"
    • " 123456"
    • "12345asdasd"
    • " 12345 asdd"
  3. Todo String que cumpla con las 2 reglas anteriores (ser un número válido), será truncado: cuando se encuentre una letra, espacio o caracteres especiales (comas, acentos,...) dentro del String. Como resultado, retornará los dígitos que estén más a la izquierda de la primera letra (espacio o caracter) encontrada.
    • Ejemplos 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

Una alternativa al parseInt, que valida que los String contengan solo números la tenemos a continuación:

function validarNumero(c_numero)
{
   //chequeo la longitud de c_numero:
   // Si (c_numero.length es igual a Cero) quiere decir que c_numero es una cadena Vacía.
   // Si (c_numero.length es distinto(mayor) de Cero) podemos asegurar que c_numero contiene por lo menos una letra
   //a la cual se le puede hacer la validación
   if (c_numero.length == 0)
   {
       return "NaN";
   }
   else
   {
       //Se recorre c_numero por todos sus caracteres chequeando que todos sean dígitos
       //la condición >="0" y <="9" es basada en el valor ascii que tienen los números en la tabla ascii.
       //Si alguno de los caracteres no es un número la función retornará un NaN
       //Si no retornará el 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;
   }
}

Ejemplos de validación de números

utilizando la función ParseInt:
Resultado de aplicar la función:



utilizando la función validarNumero (llamando a la función validar):
Resultado de aplicar la función:



utilizando la función validarNumero (llamando a la función validarComplejo):
Resultado de aplicar la función:

José Antonio Jiménez Garelli

Manual