parseInt 总是返回 NaN?

Posted

技术标签:

【中文标题】parseInt 总是返回 NaN?【英文标题】:parseInt always returns NaN? 【发布时间】:2012-04-28 09:18:05 【问题描述】:

长话短说,我正在尝试验证电话字段。我已经添加 isNaNparseInt 用于检查该字段中的 " " 但那是说

以下内容永远不会验证为真..我错过了什么?

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() 的建议,但这仍然允许使用 -21123.456 之类的内容。检查字符串中是否存在非数字的最佳方法如下:

function hasNonDigit(str)
  return /\D/g.test(str.toString());


console.log(hasNonDigit("123-456-7890"));
console.log(hasNonDigit("1234567890"));

【讨论】:

以上是关于parseInt 总是返回 NaN?的主要内容,如果未能解决你的问题,请参考以下文章

js你不是的那些基础问题-数据类型的转换

尝试将数据库中的整数添加到 let 但总是返回 NaN

为啥 parseInt("0x") 返回 NaN [重复]

["1", "2", "3"].map(parseInt) 为何返回[1,NaN,NaN]

深入了解parseInt

Js parsetInt() 字符串转换,只能转换字符串,数字开头的才会返回数值,否则为NaN,空字符串也返回NaN