Wie kann ich überprüfen, ob ein Zeichenfolgenwert in Go eine Ganzzahl ist oder nicht?
Etwas wie
v := "4"
if isInt(v) {
fmt.Println("We have an int, we can safely cast this with strconv")
}
Hinweis: Ich weiß, dass dies strconv.Atoi
einen Fehler zurückgibt, aber gibt es eine andere Funktion, um dies zu tun?
Das Problem mit dem strconv.Atoi
ist , dass sie zurückkehren wird 7
für"a7"
strconv.Atoi
gibt einen Fehler für "7a" zurück. play.golang.org/p/MTfQSOqPW3Antworten:
Wie Sie sagten, können Sie dafür strconv.Atoi verwenden.
if _, err := strconv.Atoi(v); err == nil { fmt.Printf("%q looks like a number.\n", v) }
Sie können
scanner.Scanner
(vontext/scanner
) im Modus verwendenScanInts
oder einen regulären Ausdruck verwenden, um die Zeichenfolge zu überprüfen, diesAtoi
ist jedoch das richtige Werkzeug für den Job.quelle
Dies ist besser, Sie können nach Ints bis zu 64 (oder weniger) Bits suchen
strconv.Atoi unterstützt nur 32 Bit
if _, err := strconv.ParseInt(v,10,64); err == nil { fmt.Printf("%q looks like a number.\n", v) }
Probieren Sie es mit v aus: = "12345678900123456789"
quelle
Sie können verwenden
unicode.IsDigit()
:import "unicode" func isInt(s string) bool { for _, c := range s { if !unicode.IsDigit(c) { return false } } return true }
quelle
IsDigit
sagt ja,strconv.Atoi
kann es aber nicht analysieren play.golang.org/p/aLfLfwDgfrSie können verwenden
govalidator
.Code
govalidator.IsInt("123") // true
Vollständiges Beispiel
package main import ( "fmt" valid "github.com/asaskevich/govalidator" ) func main() { fmt.Println("Is it a Integer? ", valid.IsInt("978")) }
Ausgabe:
$ go run intcheck.go Is it a Integer? true
quelle
Sie können dies auch mit regexp überprüfen.
Es kann ein wenig übertrieben sein, bietet Ihnen aber auch mehr Flexibilität, wenn Sie Ihre Regeln erweitern möchten.
Hier ein Codebeispiel:
package main import ( "regexp" ) var digitCheck = regexp.MustCompile(`^[0-9]+$`) func main() { digitCheck.MatchString("1212") }
Wenn Sie möchten, dass es ausgeführt wird: https://play.golang.org/p/6JmzgUGYN3u
Ich hoffe es hilft ;)
quelle
das könnte helfen
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 }
quelle
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") } }
quelle
a-z
ist nicht unbedingt eine Zahl.