【问题标题】:parseFloat function does not work as expectedparseFloat 函数无法按预期工作
【发布时间】:2012-06-26 14:16:15
【问题描述】:

我需要验证文本框条目。如果用户在绑定期间在此字段中输入字符,它应该只允许整数,因为实体框架会失败。

问题来了:

当用户在此字段中输入 10-d 时,parseFloat 返回 true,因为它将 10 作为数字并忽略其余值。虽然 IMO 它应该抛出 NAN 错误,因为输入文本无法转换为浮点数。

请查看以下示例,您可以使用它。 http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_parsefloat

我感兴趣的是在上面的示例中获得 40 年的 NAN 输入。

document.write(parseFloat("40 years") + "<br />");

如果我需要进行更多验证,请告诉我。

【问题讨论】:

  • 使用$.isNumeric('10-d');$.isNumeric('10 years') 都将返回false。
  • 如果你想要整数,试试parseInt("string",10)。第二个参数是基数,它告诉它使用什么数字基数。在这种情况下,以 10 为基数。
  • 实际上parseFloat('10-d')返回10而不是true。访问es5.github.com/#x15.1.2.3 了解parseFloat() 的工作原理。

标签: javascript jquery parsefloat


【解决方案1】:

听起来你想使用isNaN 函数。

isNaN('40'); //false, as '40' is a number
isNaN('40 years'); //true, as '40 years' is not a number

更新

如上所述,这不检查整数。为此,您可以使用

function isInt(value) { 
  return !isNaN(value) && value % 1 === 0; 
}

这将为“40”、40、“40”返回 true。 “40-d”、“40.12”、40.12、“40 年”为 false。

jsFiddle Demo

如果您不想要尾随小数,那么@jakeclarkson 的正则表达式解决方案会更好

【讨论】:

    【解决方案2】:

    如果您只想允许 整数,那么您可以使用:

    function isInteger(str) {
        return /^[0-9]*$/.test(str);
    }
    

    isNaN 将返回 false,如果您提供小数点,即

    isNaN("3.14"); // false, i.e. it is a number
    

    而上面的isInteger() function 可以正常工作,即

    isInteger("3.14"); // false
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多