简体   繁体   English

如何可靠地检查 Javascript 字符串是否为数字

[英]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.如果第一个字符是数字,则parseIntparseFloatString转换为 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'));

All you need is Number您只需要Number

 console.log(Number("3, 4, 5") || false) console.log(Number("3, (123)") || false) console.log(Number("3, 123)") || false) console.log(Number('123') || false)

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM