在javascript中检查字符串中的数字

时间:2013-10-29 14:33:25

标签: javascript

我有一个字符串,比如说

var Str = 'My name is 123 and my name is 234'

现在我将其拆分为

var arrStr = Str.split(' ');

我遍历数组并具有不同的逻辑,具体取决于单词是字符串还是数字。我该如何检查?我试过typeof这对我不起作用。

修改

看到多个答案后。现在,我绝望,这是最有效的方式吗?

4 个答案:

答案 0 :(得分:6)

如果你只关心数字,那么你可以使用这样的正则表达式而不是使用split:

var input = "My name is 123 and my name is 234";
var results = input.match(/\d+/g)

如果您关心所有碎片,那么您可以使用另一个表达式来查找所有非空格字符,如下所示:

var input = "My name is 123 and my name is 234";
var results = input.match(/\S+/g)

然后逐个迭代它们,并使用@CMS在此isNumeric()中发布的着名famous question函数检查给定字符串是否为数字。

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

注意:感谢@Pointy,如果您想将它们作为数字,input.match(/\d+/g).map(Number)

答案 1 :(得分:2)

您需要尝试将数组值转换为整数。

要迭代它们,您可以使用for循环:

for(i=0;i<arrStr.length;i++) {
    var result = !isNaN(+arrStr[i]) ? 'number' : 'string';
    console.log(result);
}

这里我使用一元+来尝试将每个数组值的值转换为数字。如果失败,结果将为NaN。然后,我使用JavaScript的isNaN()方法来测试此值是否为NaN。如果不是,则为数字,否则为字符串。

使用您提供的字符串的结果是:

string
string
string
number
string
string
string
string
number

要在if语句中使用它,我们可以简单地说:

for(i=0;i<arrStr.length;i++) {
    if(isNaN(+arrStr[i])) {
        /* Process as a string... */
    }
    else {
        /* Process as a number... */
    }
}

JSFiddle demo

答案 2 :(得分:1)

阐述Sniffer的回答......

var input = "My name is 123 and my name is 234";
var numberArray = input.match(/\d+/g);
var wordArray = input.match(/[A-Za-z]+/g);

for (var number in numberArray)
{
    //do something
}
for (var word in wordArray)
{
    //do something
}

答案 3 :(得分:0)

在研究时,我发现了Number()对象。这通常用于处理数字。 MDN有很好的文档。

我发现Number()在未传递数字时返回NaN(非数字)。由于没有数字返回NaN,这可能是检查传递的对象是字符串还是数字文字的好方法。

所以我的代码是:

if (Number(arrStr[i]) == NaN){
    //string
} else  {
    //number
}