> Manuales > Taller de Javascript

Explicaciones de los problemas del uso de parseInt para validar números enteros. En muchos casos puede dar lugar a situaciones confusas. Te ofrecemos un par de funciones de validación de enteros más adecuadas.

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:

Resumen del comportamiento de la función parseInt

Como se puede observar de los ejemplso anteriores, parseInt presenta un resultado a veces un poco caprichoso. Vamos a resumir a continuación el comportamiento, para dejar las cosas un poco más claras

Retornará un número válido si:

En este caso tenemos varios ejemplos de números válidos:

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:

Alternativa a la validación de enteros sin usar parseInt

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

function validarNumero(c_numero) {
    // Verifica si la cadena está vacía
    if (c_numero.length === 0) {
        return NaN; // Retorna NaN para indicar que no es un número
    } else {
        // Recorre cada carácter de la cadena para verificar si todos son dígitos
        for (let i = 0; i < c_numero.length; i++) {
            if (!(c_numero.charAt(i) >= "0" && c_numero.charAt(i) <= "9")) {
                return NaN; // Retorna NaN si encuentra un carácter que no es un dígito
            }
        }
        return Number(c_numero); // Retorna el número si todos los caracteres son dígitos
    }
}

Y ahora, por si te gusta más, te paso esta misma función pero mejorada haciendo uso de expresiones regulares, que crean un código más compacto para las comprobaciones.

function validarNumero(c_numero) {
    if (c_numero.length === 0) {
        return NaN; // Retorna el valor especial NaN
    } else {
        // Utiliza expresión regular para verificar si la cadena contiene solo dígitos
        if (!c_numero.match(/^[0-9]+$/)) {
            return NaN; // Retorna el valor especial NaN si contiene caracteres no numéricos
        }
        return Number(c_numero); // Retorna el número si la cadena contiene solo dígitos
    }
}

José Antonio Jiménez Garelli

Manual