En Typecript, cómo comprobar si una cadena es numérica

Resuelto user3509546 asked hace 10 años • 18 respuestas

En Typecript, esto muestra un error que dice que isNaN solo acepta valores numéricos.

isNaN('9BX46B6A')

y esto devuelve falso porque parseFloat('9BX46B6A')se evalúa como9

isNaN(parseFloat('9BX46B6A'))

Todavía puedo ejecutar con el error que aparece en Visual Studio, pero me gustaría hacerlo de la manera correcta.

Actualmente, he escrito esta función modificada:

static isNaNModified = (inputStr: string) => {
    var numericRepr = parseFloat(inputStr);
    return isNaN(numericRepr) || numericRepr.toString().length != inputStr.length;
}
user3509546 avatar May 03 '14 04:05 user3509546
Aceptado

La forma de convertir una cadena en un número es con Number, no con parseFloat.

Number('1234') // 1234
Number('9BX9') // NaN

También puedes usar el operador unario más si te gusta la taquigrafía:

+'1234' // 1234
+'9BX9' // NaN

Tenga cuidado al comparar con NaN (el operador ===y !==no funciona como se esperaba NaN). Usar:

 isNaN(+maybeNumber) // returns true if NaN, otherwise false
C Snover avatar May 03 '2014 06:05 C Snover
function isNumber(value?: string | number): boolean
{
   return ((value != null) &&
           (value !== '') &&
           !isNaN(Number(value.toString())));
}
Gil Epshtain avatar May 16 '2018 17:05 Gil Epshtain

Actualizar

Este método ya no está disponible en rxjs v6


Lo resolví usando el operador isNumeric de la biblioteca rxjs (importando rxjs/util/isNumeric

import { isNumeric } from 'rxjs/util/isNumeric';

. . .

var val = "5700";
if (isNumeric(val)){
   alert("it is number !");
}
Richard Lee avatar Feb 08 '2017 13:02 Richard Lee

Mi solución simple aquí es:

const isNumeric = (val: string) : boolean => {
   return !isNaN(Number(val));
}

// isNumberic("2") => true
// isNumeric("hi") => false;
Hung Vu avatar Oct 15 '2020 10:10 Hung Vu