En Typecript, cómo comprobar si una cadena es numérica
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;
}
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
function isNumber(value?: string | number): boolean
{
return ((value != null) &&
(value !== '') &&
!isNaN(Number(value.toString())));
}
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 !");
}
Mi solución simple aquí es:
const isNumeric = (val: string) : boolean => {
return !isNaN(Number(val));
}
// isNumberic("2") => true
// isNumeric("hi") => false;