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

时间:2019-02-04 19:44:33

标签: javascript types numbers

如何确定字符串是否代表数字?

直接且可能是幼稚的方式是这样的:

Project Key is not associated with current project or the script version doesn't exist.

但是,以上操作无效。请注意,以下所有内容均返回true:

function is_number(my_str) {
  return !isNaN(parseInt(my_str));
}

问题在于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"); 似乎只看第一个单词。您对这里更全面的解决方案有任何想法吗?

3 个答案:

答案 0 :(得分:1)

您可以使用Number()。 如果第一个字符是数字,则parseIntparseFloat会将String转换为Number。但是Number()检查整个String。如果整个字符串不是数字,则返回数字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'));

答案 1 :(得分:0)

您只需要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)

答案 2 :(得分:0)

这是我基于正则表达式的工作:

function isNumber (string) {
  return /^-?[0-9]+(?:\.[0-9]+)?(?:[eE][-+]?[0-9]+)?$/.test(string);
}

包括对前导符号,小数位和指数的支持。

如果返回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));
});