检查string是否为int golang

K2x*_*2xL 53 go

如何在Golang中检查字符串值是否为整数?

就像是

v := "4"
if isInt(v) {
  fmt.Println("We have an int, we can safely cast this with strconv")
}
Run Code Online (Sandbox Code Playgroud)

注意:我知道strconv.Atoi返回错误,但还有其他功能吗?

的问题strconv.Atoi是,它会返回7"a7"

Pau*_*kin 115

如你所说,你可以使用strconv.Atoi.

if _, err := strconv.Atoi(v); err == nil {
    fmt.Printf("%q looks like a number.\n", v)
}
Run Code Online (Sandbox Code Playgroud)

您可以在模式下使用scanner.Scanner(from text/scanner)ScanInts,或使用正则表达式来验证字符串,但Atoi它是正确的工具.

  • 该解决方案的问题是“ v”值前面的+和-字符也被检测为有效数字。 (2认同)

小智 22

这是更好的,你可以检查高达64(或更少)位的int

strconv.Atoi仅支持32位

if _, err := strconv.ParseInt(v,10,64); err == nil {
    fmt.Printf("%q looks like a number.\n", v)
}
Run Code Online (Sandbox Code Playgroud)

尝试用v:="12345678900123456789"


Cas*_*per 8

您可以使用govalidator.

代码

govalidator.IsInt("123")  // true
Run Code Online (Sandbox Code Playgroud)


完整示例

package main

import (
    "fmt"
    valid "github.com/asaskevich/govalidator"
)

func main() {
    fmt.Println("Is it a Integer? ", valid.IsInt("978"))
}
Run Code Online (Sandbox Code Playgroud)

输出:

$ go run intcheck.go
Is it a Integer?  true
Run Code Online (Sandbox Code Playgroud)

  • 你正在拉一个完整的结构验证库来做一些可以用 go 的标准库在两行中完成的事情? (12认同)

nic*_*ssi 6

您也可以使用正则表达式来检查这一点。

这可能有点矫枉过正,但如果您想扩展规则,它也为您提供了更大的灵活性。

这里有一些代码示例:

package main

import (
    "regexp"
)

var digitCheck = regexp.MustCompile(`^[0-9]+$`)

func main() {
    digitCheck.MatchString("1212")
}
Run Code Online (Sandbox Code Playgroud)

如果你想看到它运行:https : //play.golang.org/p/6JmzgUGYN3u

希望能帮助到你 ;)


Ric*_*all 5

你可以使用unicode.IsDigit():

import "unicode"

func isInt(s string) bool {
    for _, c := range s {
        if !unicode.IsDigit(c) {
            return false
        }
    }
    return true
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这取决于“int”的确切含义。例如 ٢ 是一个 int 吗?`IsDigit` 说是,但 `strconv.Atoi` 无法解析它 https://play.golang.org/p/aLfLfwDgfr (4认同)