parseInt 总是返回 NaN?
Posted
技术标签:
【中文标题】parseInt 总是返回 NaN?【英文标题】:parseInt always returns NaN? 【发布时间】:2012-04-28 09:18:05 【问题描述】:长话短说,我正在尝试验证电话字段。我已经添加
isNaN
和 parseInt
用于检查该字段中的 " "
但那是说
以下内容永远不会验证为真..我错过了什么?
if(isNaN(parseInt(phone)))
error.text("Sorry but this phone field requires numbers only");
return false;
else
return true;
它总是失败...即使我在字段中输入一个数字并提交,它也永远不会读取 true。 我总是收到错误消息。
编辑:我正在测试来自表单的输入值,phone
是字段的名称。
【问题讨论】:
为我工作,例如电话=“5”。你的测试输入值是多少? 是的,抱歉,我正在测试表单中的输入值 您也应该在问题中包含您的 html。这可能有助于我们调试它。 -1 不包括您正在测试的实际值。我猜测phone
是 HTML 输入元素引用,而不是其中的 .value
。
我想知道是否正在评估 domnode 而不是表单值 - 因此永远不会返回 true,因为对象上的 parseInt 将始终不是数字。
【参考方案1】:
将 JS 字符串强制转换为数字的各种方法及其后果:
(来源:phrogz.net)
我个人使用*1
,因为它打字很短,但仍然很突出(与一元+不同),要么给我用户输入的内容,要么完全失败。我只在我知道最后会忽略非数字内容,或者当我需要解析非 base-10 字符串时使用parseInt()
。
编辑:根据您的评论,如果使用phone.val()
已修复则
-
您使用的是 jQuery(您从未提及,但应该有),并且
您实际上拥有/拥有一个 jQuery 对象,包装了一个或多个 DOM 元素(可能只有一个)。
每当您执行var foo = $('…');
时,foo
变量都会引用一个或多个元素的 jQuery 对象。您可以通过var fooEl = foo[0];
或var fooEl = foo.get(0);
从中获取第一个实际的 DOM 元素……但即便如此,您仍然拥有一个 DOM 元素,而不是它的特定属性。
对于表单输入,您需要从 DOM 元素中获取 .value
,这就是 jQuery 的 .val()
方法所做的。
【讨论】:
【参考方案2】:parseInt
有时有点奇怪:
> parseInt("123-456-789")
123
幸运的是,您可以通过以下方式解决您的问题:
> Number("123-456-789")
NaN
【讨论】:
【参考方案3】:parseInt 仅在第一个字符无法转换为数字时返回 NaN。
https://developer.mozilla.org/en/javascript/Reference/Global_Objects/parseInt
【讨论】:
【参考方案4】:我已经看到了 Number()
的建议,但这仍然允许使用 -21
或 123.456
之类的内容。检查字符串中是否存在非数字的最佳方法如下:
function hasNonDigit(str)
return /\D/g.test(str.toString());
console.log(hasNonDigit("123-456-7890"));
console.log(hasNonDigit("1234567890"));
【讨论】:
以上是关于parseInt 总是返回 NaN?的主要内容,如果未能解决你的问题,请参考以下文章