从字符串中解析数字并检测哪个字符串是数字

时间:2017-04-12 18:56:20

标签: javascript

我有脚本,当字符串实际上是数字时,应该将字符串转换为数字。

首先我尝试了isNumber(x),但它对看起来像数字的字符串不起作用,但实际上不是,例如协议编号前导零'035859':

   if (isNumber('035859')) {
      parseFloat('035859'); //35859
   }

接下来我尝试解析并比较解析后的字符串,我遇到了相反的问题 - 有些数字未被识别为数字

 if (parseFloat('2.00').toString() == '2.00') //false

如何查找所有数字,但跳过所有字符串?可能是熟悉全球方法而没有编码所有可能的例外的人吗?

2 个答案:

答案 0 :(得分:4)

如果输入字符串无法转换为数字,则

parseFloatparseInt都会返回NaN。您可以使用NaN函数测试isNaN

var number = parseFloat( input );
if( isNaN( number ) {
    // not a number
}
else {
    // is a number
}

还有Infinity的特例,你可能也想测试一下:

var number = parseFloat( input );
if( !isNaN( number ) && isFinite( number ) ) {
    // is a number that is not infinity:


}

您可以通过使用自己的简单包装函数来节省麻烦,该函数在失败时返回null

function getNumber( input ) {

    var number = parseFloat( input );
    if( !isNaN( number ) && isFinite( number ) ) return number;
    return null;
}

像这样使用:

var number = getNumber( input );
if( number != null ) {
    // do stuff
}

答案 1 :(得分:1)

您可以设计一个正则表达式,该表达式只匹配您认为的数字(parseFloat将转换为数字的子集):



function toNumber(s) {
    return /^-?([1-9]\d*|0)(\.\d+)?$/.test(s) ? +s : s;
}

console.log(typeof toNumber('2.00')); // number
console.log(typeof toNumber('0472638')); // string