首先不说废话,直接把结论放出来,解析在下面:
结论:
方法 1:用 isNaN 和 parseFloat 联手出击(最常用)
function isNumeric(value) {
return !isNaN(parseFloat(value)) && !isNaN(value);
}
方法 2:用 isFinite 和 parseFloat 的黄金搭档
function isNumeric(value) {
return !isNaN(parseFloat(value)) && isFinite(value);
}
方法 3:用正则表达式来一网打尽
function isNumeric(value) {
return /^[+-]?\d+(\.\d+)?$/;
}
注意点
判断字符串是否 是一个数字,要注意问题的坑是isNaN("") === false,且Number("") === 0
解析
方法 1:用 isNaN 和 parseFloat 联手出击
function isNumeric(value) {
return !isNaN(parseFloat(value)) && !isNaN(value);
}
console.log(isNumeric("+123.12")); // true
console.log(isNumeric("123abc")); // false
console.log(isNumeric("")); // false
console.log(isNumeric(Infinity)); // true
parseFloat(value) 可以来排除空字符串的情况,因为parseFloat("")===NaNisNaN(value) 判断是否是一个纯数字的字符串
方法 2:用 isFinite 和 parseFloat 的黄金搭档
接下来是 isFinite 和 parseFloat 这对黄金搭档。这个方法同样非常有效哦!
function isNumeric(value) {
return !isNaN(parseFloat(value)) && isFinite(value);
}
console.log(isNumeric("-123.45")); // true
console.log(isNumeric("123abc")); // false
console.log(isNumeric("")); // false
console.log(isNumeric(Infinity)); // false
parseFloat(value) 依然负责排除空字符串的情况isFinite 函数用来判断参数是否为一个有限数值。目的和 isNaN一样,判断是否是一个纯数字的字符串。
(isFinite方法1和2结果isFinite的结果是不一样哦,可自行选择)
这个组合可以确保 value 是一个真正的数字,不是 Infinity 或者 NaN。
方法 3:用正则表达式来一网打尽
最后一个方法,咱们来用正则表达式。虽然稍微复杂点,但它的准确性非常高哦!
function isNumeric(value) {
return /^[+-]?\d+(\.\d+)?$/.test(value);
}
console.log(isNumeric("+123")); // true
console.log(isNumeric("-123.45")); // true
console.log(isNumeric("123abc")); // false
console.log(isNumeric("")); // false
这个正则表达式 ^[+-]?\d+(\.\d+)?$ 看起来有点复杂,但它非常强大!
^[+-]? 匹配可选的正负号。\d+ 匹配一个或多个数字。(\.\d+)? 匹配可选的小数部分。