如何简单地检查字符串是否可以转换为整数?
我的意思只是整数,所以像
'10.1'
这样的字符串不会被转换为10
。
例如,如果我这样做:
parseInt('10.1', 10)
返回 10
是否有与 Python 中类似的东西,这样我就不需要做大量检查?
在Python中,如果我这样做
int('10.1')
,它会给我错误,但如果字符串实际上是整数,只有这样它才可以让你像int('10')
一样转换它。因此,即使不使用正则表达式或一些额外的检查,也可以很容易地进行检查。
我试过这个:
function isInteger (value) {
if ($.isNumeric(value) && Number(value) % 1 === 0){
return true;
} else {
return false;
}
}
它有点工作,但如果我写例如
10.
,它将返回true,因为Number
转换为10
。我想我需要使用正则表达式来检查这样的事情?
附注我搜索了这个问题,但所有答案似乎都很模糊,实际上没有回答如何正确检查整数(不仅仅是数字)。
一种可能性是使用正则表达式进行测试,如下所示:
function isInteger(value) {
return /^\d+$/.test(value);
}
如果我正确理解你的问题,那么应该这样做:
function isInteger(value) {
if(parseInt(value,10).toString()===value) {
return true
}
return false;
}
它将字符串转换为整数,然后返回字符串并将其与原始字符串进行比较。如果它们匹配,则返回 true,否则返回 false。
我知道这是一个很老的话题,
但我想分享一种更优雅的方法。
由于所有 JavaScript 对象都从原型继承属性和方法,而本机类型都是由对象介导的,因此我们应该能够在它们上定义自定义属性。
我习惯了一个js文件,它定义了有用的东西,如下
Object.defineProperty(String.prototype, 'isInt', {
get: function () {
let number = parseFloat(this)
if (!/^[0-9]+\.[0-9]+$/gm.test(this) && !/^[0-9]+$/gm.test(this)) return false
return number >= -2147483648 && number <= 2147483647 && number % 1 == 0
}
})
一旦包含,您就可以检查字符串是否是这样的整数
let str1 = "10"
let str2 = "10.1"
str1.isInt // true
str2.isInt // false
请注意,实际实现还会检查该值是否是有效的 4 字节整数(Int32),您可以删除 number >= -2147483648 && number <= 2147483647 部分以匹配任何整数值(我目前正在这样做具有几乎相同的 isLong 属性)
您可以检查以下代码片段来测试输出
const input = document.querySelector("input")
const button = document.querySelector("button")
const label = document.querySelector("label:nth-of-type(2)")
// isInt attribute
Object.defineProperty(String.prototype, 'isInt', {
get: function () {
let number = parseFloat(this)
if (!/^[0-9]+\.[0-9]+$/gm.test(this) && !/^[0-9]+$/gm.test(this)) return false
return number >= -2147483648 && number <= 2147483647 && number % 1 == 0
}
});
button.addEventListener("click", function(e) {
label.innerHTML = input.value.isInt
})
<input/>
<button>evaluate</button>
<label>IsInteger:</label>
<label></label>
你可以使用
js的数字函数(http://www.w3schools.com/jsref/jsref_number.asp)
或
js的parseInt函数(http://www.w3schools.com/jsref/jsref_parseint.asp)
您可以使用正则表达式来检测它是否匹配任何值。
function isInterger(value) {
if (value.match(/^\d+$/) {
return true;
} else {
return false;
}
}
您可以使用 isNaN:
!isNaN(Number(value))