在 JavaScript 中解析一个整数(*仅*一个整数)
Parse an integer (and *only* an integer) in JavaScript
提示,因为可以将字符串转换为数字,因此只有除整数以外的任何变体都会产生错误。
func('17') = 17;
func('17.25') = NaN
func(' 17') = NaN
func('17test') = NaN
func('') = NaN
func('1e2') = NaN
func('0x12') = NaN
ParseInt 不起作用,因为它不能正常工作。
ParseInt('17') = 17;
ParseInt('17.25') = 17 // incorrect
ParseInt(' 17') = NaN
ParseInt('17test') = 17 // incorrect
ParseInt('') = NaN
ParseInt('1e2') = 1 // incorrect
最重要的是:要使该功能在 IE、Chrome 和其他浏览器中正常工作!!!
您可以使用 regular expression 和三元运算符来拒绝所有包含非数字的字符串:
function intOrNaN (x) {
return /^\d+$/.test(x) ? +x : NaN
}
console.log([
'17', //=> 17
'17.25', //=> NaN
' 17', //=> NaN
'17test', //=> NaN
'', //=> NaN
'1e2', //=> NaN
'0x12' //=> NaN
].map(intOrNaN))
这将满足您的所有测试:
function func (str) {
var int = parseInt(str, 10);
return str == str.trim() && str == int ? int : NaN
}
提示,因为可以将字符串转换为数字,因此只有除整数以外的任何变体都会产生错误。
func('17') = 17;
func('17.25') = NaN
func(' 17') = NaN
func('17test') = NaN
func('') = NaN
func('1e2') = NaN
func('0x12') = NaN
ParseInt 不起作用,因为它不能正常工作。
ParseInt('17') = 17;
ParseInt('17.25') = 17 // incorrect
ParseInt(' 17') = NaN
ParseInt('17test') = 17 // incorrect
ParseInt('') = NaN
ParseInt('1e2') = 1 // incorrect
最重要的是:要使该功能在 IE、Chrome 和其他浏览器中正常工作!!!
您可以使用 regular expression 和三元运算符来拒绝所有包含非数字的字符串:
function intOrNaN (x) {
return /^\d+$/.test(x) ? +x : NaN
}
console.log([
'17', //=> 17
'17.25', //=> NaN
' 17', //=> NaN
'17test', //=> NaN
'', //=> NaN
'1e2', //=> NaN
'0x12' //=> NaN
].map(intOrNaN))
这将满足您的所有测试:
function func (str) {
var int = parseInt(str, 10);
return str == str.trim() && str == int ? int : NaN
}