parseFloat函数不能按预期工作

时间:2012-06-26 14:16:16

标签: javascript jquery parsefloat

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

这是问题:

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

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

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

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

如果我需要进行更多验证,请与我们联系。

2 个答案:

答案 0 :(得分:4)

听起来您想使用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年”而言是假的。

jsFiddle Demo

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

答案 1 :(得分: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