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


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

变量输入直接填充inputfield的内容。我不仅希望只得到特定领域的输入,而且只希望得到数字。我如何扩展上面的条件,即它只接受数字作为输入,而不接受例如输入a

您可以先确保它是一个数字,使用类似的东西

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

一旦解析了输入,就可以验证是否为not isNaN,其中NaN代表";不是数字;。

您需要首先解析它,因为isNaN试图转换数字,所以isNaN('10')返回true。如果你先用parseInt解析它,你可以去:(

否则,如果不进行解析,您可能会在该变量中有一个字符串。Javascript是伪的,并且仍然将'10' >= 0计算为true,但如果您可以强制使用数字则更好。

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

  • 解析。。。这意味着一旦发现错误字符,它就会停止解析,然后返回迄今为止获得的结果。类似parseInt("55ab") == 55

  • 它返回整数,所以对于具有小数部分的输入,您将不会得到该分数。在这种情况下,可以提出parseFloat,但这也具有第一点中提到的行为。

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

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

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

最新更新