Javascript - 检查字符串是否可以转换为整数?

问题描述 投票:0回答:6

如何简单地检查字符串是否可以转换为整数?

我的意思只是整数,所以像

'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
。我想我需要使用正则表达式来检查这样的事情?

附注我搜索了这个问题,但所有答案似乎都很模糊,实际上没有回答如何正确检查整数(不仅仅是数字)。

javascript jquery integer
6个回答
23
投票

一种可能性是使用正则表达式进行测试,如下所示:

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

5
投票

如果我正确理解你的问题,那么应该这样做:

function isInteger(value) {
  if(parseInt(value,10).toString()===value) {
    return true
  }
  return false;
}

它将字符串转换为整数,然后返回字符串并将其与原始字符串进行比较。如果它们匹配,则返回 true,否则返回 false。


1
投票

我知道这是一个很老的话题,
但我想分享一种更优雅的方法。

由于所有 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>


0
投票

0
投票

您可以使用正则表达式来检测它是否匹配任何值。

function isInterger(value) {
     if (value.match(/^\d+$/) {
        return true;
   } else {
        return false;
   }
}

https://regex101.com/r/lE5tK1/1


0
投票

您可以使用 isNaN:

!isNaN(Number(value))
© www.soinside.com 2019 - 2024. All rights reserved.