Javascript从字符串解析整数

时间:2009-10-15 22:05:44

标签: javascript parsing

我想要做的是确定字符串是否为数字。我想知道人们对我想要解决的两个解决方案的看法(或者如果有一个我还没有找到的更好的解决方案)。 parseInt函数不合适,因为它将为“40岁”之类的参数返回一个整数值。我决定的两个解决方案是:

将Integer.valueOf()与try catch

一起使用
function isNumeric(quantity)
{
    var isNumeric = true
    try
    {
        Integer.valueOf(quantity)
    }
    catch(err)
    {
        isNumeric = false
    }
    return isNumeric
}

或单独检查每个角色

function IsNumeric(quantity)
{
    var validChars = "0123456789";
    var isNumber = true;
    var nextChar;

    for (i = 0; i < quantity.length && isNumber == true; i++) 
    { 
        nexChar = quantity.charAt(i); 
        if (validChars.indexOf(nextChar) == -1) 
        {
            isNumber = false;
        }
    }
    return IsNumber;
}

我原本以为会有比这两者更简单的解决方案。我错过了什么吗?

注意:我正在使用jQuery aswel,所以如果有一个jQuery解决方案那就足够了

7 个答案:

答案 0 :(得分:11)

我必须做你想要的事情,但我需要验证一个变量是否包含一个数字而不知道它的类型,它可能是一个数字字符串(也考虑指数表示法等),一个Number对象,基本上任何东西

我必须注意隐式类型转换,例如!isNaN(true) == true不好。

我最终编写了一组30+单元测试,你可以找到here,我使用以下函数,它通过了我的所有测试:

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

答案 1 :(得分:7)

为什么不isNaN(obj)

function IsNumeric (value) {
    return (!((isNaN(value)) || (value.length == 0)));
}

答案 2 :(得分:4)

正则表达式怎么样?

function IsNumeric(string) { 
    return string.match(/^\d+$/) !== null;
}

(没有测试或非常防守,但你明白了)

答案 3 :(得分:1)

这适用于大多数值

function isNumericString(s)
{
   return !!s && !isNaN(+s);
}

一般情况下,一元+是转换为数字的最佳方式。没有基础问题,没有悬空的非数字问题。

答案 4 :(得分:0)

我想你可以使用正则表达式来验证输入,但老实说,我看不出第一个有什么问题。

答案 5 :(得分:0)

如果您只测试字符串,为什么不让任何字符串使用该方法?

String.prototype.isNumeric= function(){
 return parseFloat(this)== this;
}

答案 6 :(得分:0)

以下是我的parseInt解决方案:

var str = "40 years old";
var isNumeric = parseInt(str) == str ? true : false;