我希望在与旧的VB6 IsNumeric()函数相同的概念空间中有什么东西?


当前回答

检查JS中的数字:

检查是否为数字的最佳方法:是有限的(20)//真的从字符串中读取值。CSS*:parseInt('2.5rem')//2parseFloat('2.5rem')//2.5 对于整数:isInteger(23/0)//错误如果值为NaN:isNaN(20)//错误

其他回答

只需使用isNaN(),这将把字符串转换为数字,如果得到有效的数字,将返回false。。。

isNaN("Alireza"); //return true
isNaN("123"); //return false

我使用这个函数作为表单验证工具,我不希望用户能够编写指数函数,所以我想出了这个函数:

<script>

    function isNumber(value, acceptScientificNotation) {

        if(true !== acceptScientificNotation){
            return /^-{0,1}\d+(\.\d+)?$/.test(value);
        }

        if (true === Array.isArray(value)) {
            return false;
        }
        return !isNaN(parseInt(value, 10));
    }


    console.log(isNumber(""));              // false
    console.log(isNumber(false));           // false
    console.log(isNumber(true));            // false
    console.log(isNumber("0"));             // true
    console.log(isNumber("0.1"));           // true
    console.log(isNumber("12"));            // true
    console.log(isNumber("-12"));           // true
    console.log(isNumber(-45));             // true
    console.log(isNumber({jo: "pi"}));      // false
    console.log(isNumber([]));              // false
    console.log(isNumber([78, 79]));        // false
    console.log(isNumber(NaN));             // false
    console.log(isNumber(Infinity));        // false
    console.log(isNumber(undefined));       // false
    console.log(isNumber("0,1"));           // false



    console.log(isNumber("1e-1"));          // false
    console.log(isNumber("1e-1", true));    // true
</script>

也许有一两个人遇到这个问题,他们需要比平时更严格的检查(就像我一样)。在这种情况下,这可能很有用:

if(str === String(Number(str))) {
  // it's a "perfectly formatted" number
}

当心这将拒绝类似于.1、40.000、080、00.1的字符串。它非常挑剔——字符串必须匹配数字的“最最小完美形式”才能通过测试。

它使用String和Number构造函数将字符串转换为一个数字,然后再次返回,从而检查JavaScript引擎的“完美最小形式”(用初始Number构造函数转换为的形式)是否与原始字符串匹配。

您也可以使用简单的parseInt函数。。。带有if条件例如

if (parseInt(i)){
    (i in dic) ? dic[i] += 1 : dic[i] = 1
}

2019:实用且严格的数字有效性检查

通常,“有效数”是指不包括NaN和Infinity的Javascript数,即“有限数”。

要检查值的数值有效性(例如来自外部源),可以在ESlint Airbnb样式中定义:

/**
 * Returns true if 'candidate' is a finite number or a string referring (not just 'including') a finite number
 * To keep in mind:
 *   Number(true) = 1
 *   Number('') = 0
 *   Number("   10  ") = 10
 *   !isNaN(true) = true
 *   parseFloat('10 a') = 10
 *
 * @param {?} candidate
 * @return {boolean}
 */
function isReferringFiniteNumber(candidate) {
  if (typeof (candidate) === 'number') return Number.isFinite(candidate);
  if (typeof (candidate) === 'string') {
    return (candidate.trim() !== '') && Number.isFinite(Number(candidate));
  }
  return false;
}

并以如下方式使用:

if (isReferringFiniteNumber(theirValue)) {
  myCheckedValue = Number(theirValue);
} else {
  console.warn('The provided value doesn\'t refer to a finite number');
}