7

长话短说,我试图验证电话字段。我添加了isNaNandparseInt用于在该字段中检查," "但那说

下面这个永远不会验证为真..我错过了什么?

if(isNaN(parseInt(phone))){
        error.text("Sorry but this phone field requires numbers only");
        return false;
    } else {
    return true;

    }

它总是失败......即使我在字段中输入一个数字并提交,它也永远不会读取真实。我总是收到错误消息。

编辑:我正在测试表单中的输入值,phone是字段的名称。

4

4 回答 4

14

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

使用上述技术转换各种字符串的结果
(来源:phrogz.net

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

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

  1. 您正在使用 jQuery(您从未提及,并且应该有),并且
  2. 您实际上拥有/拥有一个 jQuery 对象,包装了一个或多个 DOM 元素(可能只有一个)。

每当您这样做时var foo = $('…');,该foo变量都会引用一个或多个元素的 jQuery 对象。您可以通过var fooEl = foo[0];var fooEl = foo.get(0);...从中获取第一个实际的 DOM 元素,但即便如此,您仍然有一个 DOM 元素,而不是它的特定属性。

对于表单输入,您需要.value从 DOM 元素中获取 jQuery.val()方法所做的事情。

于 2012-04-17T02:45:52.303 回答
10

parseInt有时有点奇怪:

> parseInt("123-456-789")
123

幸运的是,您可能可以通过以下方式解决您的问题:

> Number("123-456-789")
NaN
于 2012-04-17T02:43:32.097 回答
9

如果第一个字符无法转换为数字,则 parseInt 仅返回 NaN。

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt

于 2012-04-17T02:44:02.727 回答
0

我已经看到Number()建议,但这仍然允许像-21or之类的东西123.456。检查字符串中是否缺少非数字的最佳方法如下:

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

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

于 2019-12-31T17:51:05.207 回答