检查string是否为int golang

时间:2014-03-23 15:58:45

标签: go

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

这样的东西
v := "4"
if isInt(v) {
  fmt.Println("We have an int, we can safely cast this with strconv")
}

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

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

8 个答案:

答案 0 :(得分:106)

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

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

您可以在模式scanner.Scanner中使用text/scanner(来自ScanInts),或使用正则表达式验证字符串,但Atoi是该作业的正确工具。

答案 1 :(得分:14)

这样更好,您可以检查高达64(或更少)位的整数

strconv.Atoi仅支持32位

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

尝试使用v:=“12345678900123456789”

答案 2 :(得分:5)

您可以使用unicode.IsDigit()

import "unicode"

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

答案 3 :(得分:2)

您可以使用govalidator

代码

govalidator.IsInt("123")  // true


完整示例

package main

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

func main() {
    fmt.Println("Is it a Integer? ", valid.IsInt("978"))
}

输出:

$ go run intcheck.go
Is it a Integer?  true

答案 4 :(得分:2)

您也可以使用regexp进行检查。

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

下面是一些代码示例:

package main

import (
    "regexp"
)

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

func main() {
    digitCheck.MatchString("1212")
}

如果您希望它运行:https://play.golang.org/p/6JmzgUGYN3u

希望它会有所帮助;)

答案 5 :(得分:1)

这会手动检查每个 CHAR 以查看它是否介于 0 和 9 之间。

func IsDigitsOnly(s string) bool {
    for _, c := range s {
        if c < '0' || c > '9' {
            return false
        }
    }
    return true
}

答案 6 :(得分:0)

这可能会帮助

func IsInt(s string) bool {
    l := len(s)
    if strings.HasPrefix(s, "-") {
        l = l - 1
        s = s[1:]
    }

    reg := fmt.Sprintf("\\d{%d}", l)

    rs, err := regexp.MatchString(reg, s)

    if err != nil {
        return false
    }

    return rs
}

答案 7 :(得分:-8)

import "fmt"
import "regexp"

func main() {
    youString :="a12345"
    match, _ := regexp.MatchString("([a-z]+)", youString)
    if  !match{
     fmt.Println("Is Number")
    } else{
     fmt.Println("Not Is Number")
    }   


    }