过滤掉非数字输入的优雅方式
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
)或十六进制或二进制记数法的 0x
或 0b
前缀来识别字符串。
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
)或十六进制或二进制记数法的 0x
或 0b
前缀来识别字符串。