【问题标题】:elegant way to filter out non numeric input过滤掉非数字输入的优雅方法
【发布时间】:2021-06-28 19:26:19
【问题描述】:
if (input >= 0 && input <= 100 ) {}

变量输入直接用输入字段的内容填充。我不仅希望只输入特定范围内的输入,还希望只输入数字。我如何扩展它只接受数字作为输入而不接受例如输入 a 的条件?

【问题讨论】:

  • 嗨。为什么不在 HTML 中使用数字输入开头... &lt;input type="number" min="0" max="100"&gt;
  • "...而不是例如输入 a?":已经使用您当前的代码,“a”将不会进入 if 块。
  • “JavaScript validate that variable is a number”似乎会返回结果

标签: javascript html algorithm logic


【解决方案1】:

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

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

解析输入后,您可以验证是否为not isNaN,其中NaN stands for "Not a Number"

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

否则,如果不解析它,您可能在该变量中有一个字符串。 Javascript 是虚拟的,仍然将 '10' &gt;= 0 评估为 true,但如果您可以强制使用数字更好。

【讨论】:

  • 是的,对不起,那又是一个括号。现在试一试:)
  • You need to parse it first because isNaN tries to convert the number parseInt'10' 的情况下会做什么?
  • 它将返回 10 :) 我将在答案中扩展我的意思。
【解决方案2】:

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

  • 解析...意味着它一旦发现一个错误的字符就会停止解析,然后返回到目前为止所获得的结果。赞parseInt("55ab") == 55

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    相关资源
    最近更新 更多