【问题标题】:JavaScript check if the value is number, but allow no leading zerosJavaScript 检查值是否为数字,但不允许前导零
【发布时间】:2013-07-19 14:04:53
【问题描述】:

我目前正在做一个项目,我需要检查用户是否输入了数值。当他输入一个以小数点开头的数字(.20)时,问题就来了。我一直在寻找解决方案,但现在我放弃了。 isNaN 或 isNumeric 都不起作用。还尝试检查:if(value > 0),但这仅在用户输入前导零时有效。 任何帮助将不胜感激!提前致谢!

已解决: isNaN 对我不起作用,因为我使用 parseInt() 而不是 parseFloat()。现在一切正常。我希望管理员原谅我提出的愚蠢问题!现在可以删除此线程。

【问题讨论】:

  • 试试if (+value > 0)
  • parseFloat(value) > 0
  • 我不明白,为什么 isNaN 不能工作 -> jsfiddle.net/6NrZA/1
  • 检查我的答案,我在 26 分钟前发布了这个,请回答
  • "isNaN 对我不起作用,因为我使用 parseInt() 而不是 parseFloat()":嗯?您根本不必使用parseIntparseFloat,只需将值传递给isNaN。它将被转换为数字,就像您使用一元加号运算符一样。 “这个话题现在可以被删除了。” 这不是它的工作原理。您将解决问题的答案标记为已接受。

标签: javascript jquery number-formatting


【解决方案1】:

工作演示http://jsfiddle.net/sPt7q/1

使用

if(parseFloat(n) > 0){}

js 中的小提琴

var n = '.2';
if (n > 0) {
    alert(n);
}
if(parseFloat(n) > 0){
    alert(parseFloat(n));
}

【讨论】:

  • 如果n 已经是一个数字,那么使用parseFloat 有什么意义?
  • 哦,你是对的,我更新了代码,请检查现在它工作正常。
【解决方案2】:

试试

function isInt(n) {
   return typeof n === 'number' && n % 1 == 0;
}

来自:How do I check that a number is float or integer?

这在 0.0 上确实失败了。

【讨论】:

    【解决方案3】:

    更好更简单的方法是使用正则表达式:

    var reg = new RegExp('^[1-9]\d*(\.\d+)?$');
    

    var reg = new RegExp('^[1-9]\d*(\.\d+)?$');
    

    用户输入将是一个字符串(来自表单域)。对照此正则表达式检查该字符串,这应该可以工作。

    示例:

     if(reg.test(userInput)) {
      //returns true
    } else {
      //returns false
    }
    

    【讨论】:

    • 为什么比使用isNaN更好?你有任何事实来支持你的主张吗?顺便说一句,您的表达式无法正确处理 '.2'
    • 更新了我的正则表达式。这将处理 2、0.2、.2(没有前导零)、2.222 等情况。此正则表达式检查也可以是小数的数字。
    • 仍然没有解释为什么它“更好”。
    • 我会说得更好,因为它检查了确切的模式,同时消除了 parseInt()、isNaN 和其他数字操作函数的使用。
    【解决方案4】:

    试试这个:

    var val = .21;
    if (!isNaN(val) && val.toString().indexOf('.') == -1) {
        console.log('valid number:' + val);
    } else {
        console.log('invalid number: ' + val);
    }
    

    jsFiddle

    【讨论】:

      猜你喜欢
      • 2016-11-20
      • 2019-07-22
      • 1970-01-01
      • 2015-11-30
      • 2020-02-21
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      • 2011-03-08
      相关资源
      最近更新 更多