过滤掉非数字输入的优雅方式

elegant way to filter out non numeric input

if (input >= 0 && input <= 100 ) {}

变量input直接填入一个inputfield的内容。我不仅希望仅获得特定范围内的输入,而且还希望仅获得数字。我如何扩展它只接受数字作为输入而不是例如输入 a 的条件?

你可以先确定它是一个数字,比如

const parsedInput = parseInt(input);
if (!isNaN(parsedInput) && parsedInput >= 0 && parsedInput <= 100) { }

解析输入后,您可以验证 not isNaN where NaN stands for "Not a Number".

您需要先解析它,因为 isNaN 会尝试转换数字,因此 isNaN('10') returns true。如果你先用 parseInt 解析它,你就可以开始了:)

否则,如果不解析它,您可能在该变量中有一个字符串。 Javascript 是虚拟的并且仍然评估 '10' >= 0 为真,但是如果你可以强制拥有一个数字更好。

通常 parseInt 建议将字符串解释为数字,但它有两个缺点:

  • It parses... 意思是它一发现坏字符就停止解析,然后 returns 到此为止的结果。喜欢parseInt("55ab") == 55

  • 它是 returns 整数,因此对于具有小数部分的输入,您不会得到该小数部分。在那种情况下,可以建议 parseFloat,但也有第一点中提到的行为。

您可以使用 Number 函数或一元函数 + 克服这些问题。后者确实是最短最快的:

let num = +input;
if (num >= 0 && num <= 100) {
    // processing logic comes here
} 

请注意,所有这些解决方案都将使用科学记数法(使用 e)或十六进制或二进制记数法的 0x0b 前缀来识别字符串。