如何在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"
答案 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")
}
}