我有脚本,当字符串实际上是数字时,应该将字符串转换为数字。
首先我尝试了isNumber(x)
,但它对看起来像数字的字符串不起作用,但实际上不是,例如协议编号前导零'035859':
if (isNumber('035859')) {
parseFloat('035859'); //35859
}
接下来我尝试解析并比较解析后的字符串,我遇到了相反的问题 - 有些数字未被识别为数字
if (parseFloat('2.00').toString() == '2.00') //false
如何查找所有数字,但跳过所有字符串?可能是熟悉全球方法而没有编码所有可能的例外的人吗?
答案 0 :(得分:4)
parseFloat
和parseInt
都会返回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