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:
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
¿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:
- Retornará un número válido si: El String empieza por un número.
- El String empieza por espacio(s) seguido de un número.
- Ejemplos de números válidos: "123456"
- " 123456"
- "12345asdasd"
- " 12345 asdd"
- 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:
utilizando la función validarNumero (llamando a la función validar):
utilizando la función validarNumero (llamando a la función validarComplejo):
José Antonio Jiménez Garelli