【问题标题】:parseInt always returns NaN?parseInt 总是返回 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 将始终不是数字。

标签: javascript nan parseint


【解决方案1】:

将 JS 字符串强制转换为数字的各种方法及其后果:


(来源:phrogz.net

我个人使用*1,因为它打字很短,但仍然很突出(与一元+不同),要么给我用户输入的内容,要么完全失败。我只在我知道最后会忽略非数字内容,或者当我需要解析非 base-10 字符串时使用parseInt()

编辑:根据您的评论,如果使用phone.val() 已修复则

  1. 您使用的是 jQuery(您从未提及,但应该有),并且
  2. 您实际上拥有/拥有一个 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"));

        【讨论】:

          猜你喜欢
          • 2014-11-16
          • 2016-05-20
          • 1970-01-01
          • 2013-07-11
          • 2018-10-01
          • 1970-01-01
          • 2016-01-14
          • 1970-01-01
          • 2017-01-09
          相关资源
          最近更新 更多