JavaScript parseInt()似乎与Java parseInt()的工作方式不同。
一个非常简单的例子是:
document.write(parseInt(" 60 ") + "<br>"); //returns 60
document.write(parseInt("40 years") + "<br>"); //returns 40
document.write(parseInt("He was 40") + "<br>"); //returns NaN
第1行没问题。但我希望第2行给出错误,因为你实际上无法将'years'转换为整数。我相信JavaScript parseInt()只检查String中的前几个字符是否为整数。
那么我怎样才能检查一下,只要字符串中有非整数,它就会返回NaN?
答案 0 :(得分:4)
parseInt旨在为解析整数提供一些灵活性。 Number构造函数对额外字符的灵活性较低,但也会解析非整数(感谢Alex):
console.log(Number(" 60 ")); // 60
console.log(Number("40 years")); // Nan
console.log(Number("He was 40")); // NaN
console.log(Number("1.24")); // 1.24
或者,使用正则表达式。
" 60 ".match(/^[0-9 ]+$/); // [" 60 "]
" 60 or whatever".match(/^[0-9 ]+$/); // null
"1.24".match(/^[0-9 ]+$/); // null
答案 1 :(得分:0)
要检查字符串是否包含非整数,请使用正则表达式:
function(myString) {
if (myString.match(/^\d+$/) === null) { // null if non-digits in string
return NaN
} else {
return parseInt(myString.match(/^\d+$/))
}
}
答案 2 :(得分:0)
我会使用正则表达式,可能类似于以下内容。
function parseIntStrict(stringValue) {
if ( /^[\d\s]+$/.test(stringValue) ) // allows for digits or whitespace
{
return parseInt(stringValue);
}
else
{
return NaN;
}
}
答案 3 :(得分:0)
最简单的方法可能是使用一元加运算符:
var n = +str;
这也将解析浮点值。
答案 4 :(得分:0)
下面是一个isInteger
函数,可以添加到所有String对象中:
// If the isInteger function isn't already defined
if (typeof String.prototype.isInteger == 'undefined') {
// Returns false if any non-numeric characters (other than leading
// or trailing whitespace, and a leading plus or minus sign) are found.
//
String.prototype.isInteger = function() {
return !(this.replace(/^\s+|\s+$/g, '').replace(/^[-+]/, '').match(/\D/ ));
}
}
'60'.isInteger() // true
'-60'.isInteger() // true (leading minus sign is okay)
'+60'.isInteger() // true (leading plus sign is okay)
' 60 '.isInteger() // true (whitespace at beginning or end is okay)
'a60'.isInteger() // false (has alphabetic characters)
'60a'.isInteger() // false (has alphabetic characters)
'6.0'.isInteger() // false (has a decimal point)
' 60 40 '.isInteger() // false (whitespace in the middle is not okay)