【问题标题】:How to Reliably Check if a Javascript String is a Number如何可靠地检查 Javascript 字符串是否为数字
【发布时间】:2019-06-28 14:45:15
【问题描述】:

如何判断一个字符串是否代表一个数字?

直截了当但可能很幼稚的方法是这样的:

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

但是,上述方法不起作用。请注意,以下所有内容都返回 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");

问题是parseInt 似乎只看第一个单词。对这里更全面的解决方案有任何想法吗?

【问题讨论】:

    标签: javascript types numbers


    【解决方案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'));

    【讨论】:

    • 接近,但请注意is_number(null) == true
    • 我知道我稍微扩大了这个函数的范围,但请注意:is_number(0) == false
    • @speedplane 好的,现在检查一下。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      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));
      });

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-07
        • 2017-11-28
        • 2011-01-23
        相关资源
        最近更新 更多