代码之家  ›  专栏  ›  技术社区  ›  Ryan Ong

当值为“0”时,IsNumeric函数不起作用

  •  -2
  • Ryan Ong  · 技术社区  · 10 月前

    我在Razor页面中有一个JavaScript函数,用于检查值是否为数字。

    当向此函数传递“0”时,它将返回false。我已经在其他RegEx测试器中测试了该表达式,“0”是一个有效的匹配项。如果输入参数为“0.0”,则正常。

    你知道出了什么问题吗?请告知。谢谢。

    function isNumericValid(value) {
      var result = false;
      if (value != "") {
        // up to 12 digits and 10 dec places
        let template = /^-{0,1}\d{1,12}(\.\d{1,10})?$/;
    
        if (template.test(value))
          result = true;
      }
      return result;
    }
    
    console.log(isNumericValid("0"))
    console.log(isNumericValid(0))
    console.log(isNumericValid("0.0"))
    console.log(isNumericValid(0.0))
    console.log(isNumericValid(1234.10))
    3 回复  |  直到 10 月前
        1
  •  2
  •   Justinas    10 月前

    这是因为 value != "" 返回false。

    替换为 不完全相等 value !== "" value != null value.length > 0 (取决于您的用例)

        2
  •  1
  •   KooiInc    10 月前

    罪魁祸首很明显(输入值应该被字符串化)。

    您的功能可以简化为一行:

    console.log(`isNumericValid("0"): ${isNumericValid("0")}`);
    console.log(`isNumericValid(0): ${isNumericValid(0)}`);
    console.log(`isNumericValid("0.0"): ${isNumericValid("0.0")}`);
    console.log(`isNumericValid(0.0): ${isNumericValid(0.0)}`);
    console.log(`isNumericValid(1234.10): ${isNumericValid(1234.10)}`);
    console.log(`isNumericValid("-1234.10"): ${isNumericValid("-1234.10")}`);
    
    function isNumericValid(value) {
      return /^-{0,1}\d{1,12}(\.\d{1,10})?$/.test(String(value).trim());
    }
        3
  •  0
  •   mplungjan Gvidas    10 月前

    这个 value != "" 返回false 0 (但不是在a "0" )因为 != 运算符,执行类型强制转换

    添加toString并使用 !== 不完全相等

    function isNumericValid(value) {
      var result = false;
      value = value.toString().trim();
      if (value !== "") {
        // up to 12 digits and 10 dec places
        let template = /^-{0,1}\d{1,12}(\.\d{1,10})?$/;
    
        if (template.test(value))
          result = true;
      }
      return result;
    }
    
    console.log(isNumericValid("0"))
    console.log(isNumericValid(0))
    console.log(isNumericValid("0.0"))
    console.log(isNumericValid(0.0))
    console.log(isNumericValid(1234.10))