parseInt总是返回NaN?

时间:2012-04-17 02:40:22

标签: javascript nan parseint

长话短说,我试图验证一个手机领域。我已经添加 isNaNparseInt用于检查字段中的" "但是说

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

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

    }

它总是失败......即使我在现场输入一个号码并提交,它也永远不会显示。 我总是得到错误mssg。

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

4 个答案:

答案 0 :(得分:10)

将JS字符串强加给数字的各种方法及其后果:

Results of converting various strings using the above techniques http://phrogz.net/JS/string_to_number.png

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

修改:根据您的评论,如果使用phone.val()修正了

  1. 您使用的是jQuery(您从未提及,应该拥有)和
  2. 你实际拥有一个jQuery对象,包装一个或多个DOM元素(可能只有一个)。
  3. 每当执行var foo = $('…');时,foo变量都会引用一个或多个元素的jQuery对象。您可以通过var fooEl = foo[0];var fooEl = foo.get(0);从中获取第一个实际的DOM元素...但即便如此,仍然具有DOM元素,而不是该元素的特定属性。

    对于表单输入,您需要从DOM元素中获取.value,这是jQuery .val()方法的作用。

答案 1 :(得分:9)

parseInt有时候有点奇怪:

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

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

> Number("123-456-789")
NaN

答案 2 :(得分:7)

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

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

答案 3 :(得分:0)

我看到了Number()的建议,但是仍然可以允许-21123.456之类的东西。检查字符串中是否存在非数字的最佳方法是这样的:

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

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