如何检查字符串是否为有效数字?
2022-08-29 21:58:20
我希望在概念空间中有一些东西与旧的VB6函数相同?IsNumeric()
我希望在概念空间中有一些东西与旧的VB6函数相同?IsNumeric()
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.
请记住,与 不同,(顾名思义)会通过将小数点后的所有内容切除来将浮点数转换为整数(如果您由于此行为而想要使用,则最好使用另一种方法):+num
parseInt
parseInt()
+'12.345' // 12.345
parseInt(12.345) // 12
parseInt('12.345') // 12
空字符串可能有点违反直觉。 将空字符串或带空格的字符串转换为零,并假定相同:+num
isNaN()
+'' // 0
+' ' // 0
isNaN('') // false
isNaN(' ') // false
但不同意:parseInt()
parseInt('') // NaN
parseInt(' ') // NaN
如果您只是尝试检查字符串是否为整数(没有小数位),则正则表达式是一个很好的方法。其他方法,例如对于如此简单的事情来说太复杂了。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