dominios y alojamiento web en hostalia

¿Es Ventajoso el uso de ParseInt para validar números?

08 de febrero de 2007
Valoración del artículo:
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.
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.
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:

  • "123456": este String retorna como resultado el número 123456 el cual es el resultado esperado.
  • "123456asd": este String retorna como resultado el número 123456 a pesar de que el String contenía letras (¿ventaja o desventaja?).
  • "asd": este String retorna como resultado NaN el cual es el resultado esperado.
  • "": este String vacío retorna como resultado NaN el cual es el resultado esperado.
  • " 123456asd": este String (que contiene varios espacios al principio del número y letras al final) retorna como resultado el número 123456 (¿ventaja o desventaja?).
  • " 123 123 asd" este String (que contiene espacios y letras) retorna como resultado el número 123 (¿ventaja o desventaja?).

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:

Compartir en redes sociales

Comentarios
Fueron enviados 5 comentarios al artículo
1 comentario no revisado
4 comentarios revisados:
Por: Andrés
08/2/2007
Mucho más simple:
<script>
function esnumero(n){
pat=/^d+$/;
return pat.test(n)
}
alert(esnumero('5'))
alert(esnumero('5w'))
alert(esnumero('w'))
</script>
A veces no funciona
Por: juanelo
28/12/2009
Pues acabo de descubrir que no siempre funciona bien parseInt.

El problema que he tenido es cuando le paso una fecha dentro de un array de la forma dd/mm/aaaa
Lo primero que hago es "partir" (split) este array en tres partes.

Lo segundo es que para cada una de las partes las paso por parseInt para comprobar el número y cual es mi sorpresa que cuando ejecuto varias veces seguidas la función con el parseInt y tengo un error cuando lo que le paso a parseInt comienza con 0, por ejemplo si como día llega 05, parseInt me devuelve 0 y el resto de la aplicación no funciona porque el día no es válido aunque sea un valor numérico.

Al final he desactivado las líneas con parseInt pero alguien puede decirme porque ocurre esto (al llamar repetidamente a la función con parseInt con una cadena que empieza por 0 devuelve 0.

Gracias
Al patrón le falta una barra
Por: José Luis
27/4/2010
pat=/^d+$/

Salu2
Al patrón le falta la barra ....y el comentario se la come:)
Por: José Luis
27/4/2010
pat=/^\d+$/

Manuales relacionados
Categorias relacionadas
El autor
Lectura recomendada
Compra este libro en Agapea, la librería urgente a domicilio.
Últimas noticias
Donaciones
Si piensas que te hemos ayudado y merecemos tu apoyo económico...