我希望在与旧的VB6 IsNumeric()函数相同的概念空间中有什么东西?
当前回答
这是一种检查变量是否不是数字的可能方法:
(isNaN(foo) || ((foo !== 0) && (!foo)))
这意味着foo是假的,但不同于0,或者isNaN(foo)是真的。
执行这种检查的另一种方法是
!isNaN(parseFloat(foo))
其他回答
这里有一个优雅的单行线来检查sNum是否是有效的数值。该代码也已针对各种输入进行了测试。
// returns True if sNum is a numeric value
!!sNum && !isNaN(+sNum.replace(/\s|\$/g, ''));
向@gman提示错误。
如果有人对此感到失望的话,我花了一些时间来修补moment.js(https://github.com/moment/moment). 我从中得到了一些东西:
function isNumeric(val) {
var _val = +val;
return (val !== val + 1) //infinity check
&& (_val === +val) //Cute coercion check
&& (typeof val !== 'object') //Array/object check
}
处理以下情况:
真!:
isNumeric("1"))
isNumeric(1e10))
isNumeric(1E10))
isNumeric(+"6e4"))
isNumeric("1.2222"))
isNumeric("-1.2222"))
isNumeric("-1.222200000000000000"))
isNumeric("1.222200000000000000"))
isNumeric(1))
isNumeric(0))
isNumeric(-0))
isNumeric(1010010293029))
isNumeric(1.100393830000))
isNumeric(Math.LN2))
isNumeric(Math.PI))
isNumeric(5e10))
错误!:
isNumeric(NaN))
isNumeric(Infinity))
isNumeric(-Infinity))
isNumeric())
isNumeric(undefined))
isNumeric('[1,2,3]'))
isNumeric({a:1,b:2}))
isNumeric(null))
isNumeric([1]))
isNumeric(new Date()))
具有讽刺意味的是,我最纠结的是:
isNumeric(new Number(1)) => false
欢迎提出任何建议。:]
它对TypeScript无效,因为:
声明函数isNaN(数字:数字):布尔值;
对于TypeScript,您可以使用:
/^\d+$/.测试(键)
这似乎抓住了看似无限数量的边缘案例:
function isNumber(x, noStr) {
/*
- Returns true if x is either a finite number type or a string containing only a number
- If empty string supplied, fall back to explicit false
- Pass true for noStr to return false when typeof x is "string", off by default
isNumber(); // false
isNumber([]); // false
isNumber([1]); // false
isNumber([1,2]); // false
isNumber(''); // false
isNumber(null); // false
isNumber({}); // false
isNumber(true); // false
isNumber('true'); // false
isNumber('false'); // false
isNumber('123asdf'); // false
isNumber('123.asdf'); // false
isNumber(undefined); // false
isNumber(Number.POSITIVE_INFINITY); // false
isNumber(Number.NEGATIVE_INFINITY); // false
isNumber('Infinity'); // false
isNumber('-Infinity'); // false
isNumber(Number.NaN); // false
isNumber(new Date('December 17, 1995 03:24:00')); // false
isNumber(0); // true
isNumber('0'); // true
isNumber(123); // true
isNumber(123.456); // true
isNumber(-123.456); // true
isNumber(-.123456); // true
isNumber('123'); // true
isNumber('123.456'); // true
isNumber('.123'); // true
isNumber(.123); // true
isNumber(Number.MAX_SAFE_INTEGER); // true
isNumber(Number.MAX_VALUE); // true
isNumber(Number.MIN_VALUE); // true
isNumber(new Number(123)); // true
*/
return (
(typeof x === 'number' || x instanceof Number || (!noStr && x && typeof x === 'string' && !isNaN(x))) &&
isFinite(x)
) || false;
};
只需使用isNaN(),这将把字符串转换为数字,如果得到有效的数字,将返回false。。。
isNaN("Alireza"); //return true
isNaN("123"); //return false