[英]How to Reliably Check if a Javascript String is a Number
How do you determine if a string represents a number?你如何确定一个字符串是否代表一个数字?
The straightforward and potentially naive way is this:直接且可能天真的方法是这样的:
function is_number(my_str) {
return !isNaN(parseInt(my_str));
}
However, the above does not work .但是,上述方法不起作用。 Notice that the following all return true:
请注意,以下所有内容都返回 true:
is_number("3, 4, 5");
is_number("3, (123)");
is_number("3, 123)");
is_number("3, (123) (and foo bar)");
is_number("3 apples and 2 oranges");
The issue is that parseInt
seems to only look at the first word.问题是
parseInt
似乎只看第一个词。 Any idea on a more comprehensive solution here?关于更全面的解决方案的任何想法?
You can use Number() .您可以使用Number() 。
parseInt
and parseFloat
converts String
to Number if first character is a number.如果第一个字符是数字,则
parseInt
和parseFloat
将String
转换为 Number。 But Number()
checks for whole String
.Number return NaN
if whole string is not number但是
Number()
检查整个String
.Number 如果整个字符串不是数字,则返回NaN
function is_number(my_str) { return !isNaN(Number(my_str)) && Boolean(my_str) || my_str == 0; } console.log(is_number("3, 4, 5")); console.log(is_number("3, (123)")); console.log(is_number("3, 123)")); console.log(is_number("3, (123) (and foo bar)")); console.log(is_number("3 apples and 2 oranges")); console.log(is_number(null)); console.log(is_number(undefined)); console.log(is_number(0)); console.log(is_number('0'));
Here's my regular-expression based effort:这是我基于正则表达式的努力:
function isNumber (string) {
return /^-?[0-9]+(?:\.[0-9]+)?(?:[eE][-+]?[0-9]+)?$/.test(string);
}
Includes support for leading sign, decimal places and exponent.包括对前导符号、小数位和指数的支持。
If it returns true
, the string can be converted to a number using JSON.parse
:如果返回
true
,则可以使用JSON.parse
将字符串转换为数字:
function isNumber (string) { return /^-?[0-9]+(?:\\.[0-9]+)?(?:[eE][-+]?[0-9]+)?$/.test(string); } function convertNumber (string) { if (isNumber(string)) { return JSON.parse(string); } } [ '0', '1.2', '-3.4', '5.6789e100', '0.1e-100', '0.1e+100', ].forEach(string => { console.log(`isNumber('${string}'):`, isNumber(string)); console.log(`typeof convertNumber('${string}'):`, typeof convertNumber(string)); });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.