如何检查字符串是否为有效数字?

2022-08-29 21:58:20

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


答案 1

2020年10月2日:请注意,许多简陋的方法都充满了微妙的错误(例如,空格,隐式部分解析,基数,数组的强制等),这里的许多答案都没有考虑到这些错误。以下实现可能适合您,但请注意,它不适用于小数点“”以外的数字分隔符:.

function isNumeric(str) {
  if (typeof str != "string") return false // we only process strings!  
  return !isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...
         !isNaN(parseFloat(str)) // ...and ensure strings of whitespace fail
}

要检查变量(包括字符串)是否为数字,请检查它是否不是数字:

无论变量内容是字符串还是数字,这都有效。

isNaN(num)         // returns true if the variable does NOT contain a valid number

例子

isNaN(123)         // false
isNaN('123')       // false
isNaN('1e10000')   // false (This translates to Infinity, which is a number)
isNaN('foo')       // true
isNaN('10px')      // true
isNaN('')          // false
isNaN(' ')         // false
isNaN(false)       // false

当然,如果需要,您可以否定这一点。例如,要实现您给出的示例:IsNumeric

function isNumeric(num){
  return !isNaN(num)
}

将包含数字的字符串转换为数字:

仅当字符串包含数字字符时才有效,否则它将返回 。NaN

+num               // returns the numeric value of the string, or NaN 
                   // if the string isn't purely numeric characters

例子

+'12'              // 12
+'12.'             // 12
+'12..'            // NaN
+'.12'             // 0.12
+'..12'            // NaN
+'foo'             // NaN
+'12px'            // NaN

将字符串松散地转换为数字

用于将“12px”转换为12,例如:

parseInt(num)      // extracts a numeric value from the 
                   // start of the string, or NaN.

例子

parseInt('12')     // 12
parseInt('aaa')    // NaN
parseInt('12px')   // 12
parseInt('foo2')   // NaN      These last three may
parseInt('12a5')   // 12       be different from what
parseInt('0x10')   // 16       you expected to see.

请记住,与 不同,(顾名思义)会通过将小数点后的所有内容切除来将浮点数转换为整数(如果您由于此行为想要使用,则最好使用另一种方法):+numparseIntparseInt()

+'12.345'          // 12.345
parseInt(12.345)   // 12
parseInt('12.345') // 12

空字符串

空字符串可能有点违反直觉。 将空字符串或带空格的字符串转换为零,并假定相同:+numisNaN()

+''                // 0
+'   '             // 0
isNaN('')          // false
isNaN('   ')       // false

但不同意:parseInt()

parseInt('')       // NaN
parseInt('   ')    // NaN

答案 2

如果您只是尝试检查字符串是否为整数(没有小数位),则正则表达式是一个很好的方法。其他方法,例如对于如此简单的事情来说太复杂了。isNaN

function isNumeric(value) {
    return /^-?\d+$/.test(value);
}

console.log(isNumeric('abcd'));         // false
console.log(isNumeric('123a'));         // false
console.log(isNumeric('1'));            // true
console.log(isNumeric('1234567890'));   // true
console.log(isNumeric('-23'));          // true
console.log(isNumeric(1234));           // true
console.log(isNumeric(1234n));          // true
console.log(isNumeric('123.4'));        // false
console.log(isNumeric(''));             // false
console.log(isNumeric(undefined));      // false
console.log(isNumeric(null));           // false

要仅允许整数,请使用:

function isNumeric(value) {
    return /^\d+$/.test(value);
}

console.log(isNumeric('123'));          // true
console.log(isNumeric('-23'));          // false