在Typescript中,如何检查一个字符串是否为数字

320
在TypeScript中,这会显示一个错误,指出isNaN仅接受数字值。
isNaN('9BX46B6A')

这会返回false,因为parseFloat('9BX46B6A')计算结果为9

isNaN(parseFloat('9BX46B6A'))

我仍然可以在Visual Studio中看到错误的情况下运行,但我想按照正确的方式做。

目前,我编写了这个修改后的函数 -

static isNaNModified = (inputStr: string) => {
    var numericRepr = parseFloat(inputStr);
    return isNaN(numericRepr) || numericRepr.toString().length != inputStr.length;
}

可能是TypeScript将字符串转换为数字的重复问题。 - Wesley Coetzee
16个回答

2

浏览了每个答案,惊讶地发现这个简单的一行代码还没有被提出:

const isNumber = (val: string | number) => !!(val || val === 0) && !isNaN(Number(val.toString()));

不支持“3e44”。 - Korayem

1
我的解决方案:
 function isNumeric(val: unknown): val is string | number {
  return (
    !isNaN(Number(Number.parseFloat(String(val)))) &&
    isFinite(Number(val))
  );
}

// true
isNumeric("-10");
isNumeric("0");
isNumeric("0xff");
isNumeric("0xFF");
isNumeric("8e5");
isNumeric("3.1415");
isNumeric("+10");
isNumeric("144");
isNumeric("5");

// false
isNumeric("-0x42");
isNumeric("7.2acdgs");
isNumeric("");
isNumeric({});
isNumeric(NaN);
isNumeric(null);
isNumeric(true);
isNumeric(Infinity);
isNumeric(undefined);
isNumeric([]);
isNumeric("some string");

无法使用“3e44”。 - Korayem

0

这适用于特殊情况,例如 null 值

if(!isNaN(yourValue) && yourValue !== true && yourValue !== false) {
    // then it's a number
} else {
    // then it's not a number
}

0
 const isNumeric = (value: string): boolean =>
  !new RegExp(/[^\d]/g).test(value.trim());

如果您想允许使用小数点

   const isNumeric = (value: string): boolean =>
      !new RegExp(/[^\d.]/g).test(value.trim());

警告,这将无法处理负数。console.log(isNumeric("-123")); // false - Romain TAILLANDIER

-3

如果 var sum=0; var x;

那么,这个怎么样? sum+=(x|0);


3
那么这如何回答OP的问题“如何检查一个字符串是否为数字”?请解释一下。 - Eric Aya

-5

一个字符串是否可以被解析成数字是运行时的关注点。由于TypeScript专注于编译时(而不是运行时)安全性,它不支持这种用例。


11
这个问题引起了足够的关注,被标记为错误,似乎在暗示它是不正确的。 - Jane Panda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接