检查字符串是否以十进制数字开头?

看起来以下作品,这是一个好方法吗?


var thestr = "192.168.0.1"

if (thestr[0]>= '0' && thestr[0] <= '9'){

    //...

}


暮色呼如
浏览 179回答 3
3回答

米脂

由于您是按字符比较并且没有字符介于 1 和 9 之间,因此我认为您的解决方案是可以的,但它没有考虑后面的其他数字。例如,如果thestr是"192.something.invalid"它不再是一个IP。我建议使用正则表达式来检查 IP。就像是\b(?:\d{1,3}\.){3}\d{1,3}\b

梵蒂冈之花

您的解决方案完全没问题。但请注意,Go 中的字符串存储为只读字节切片,其中字节是 UTF-8 编码的字节序列,并且索引字符串索引其bytes,而不是它的符文(字符)。但是由于十进制数字 ( '0'..'9') 恰好有一个字节,因此在这种情况下可以测试第一个byte,但首先您应该测试 iflen(s) > 0或s != ""。这里有一些其他的选择,在Go Playground上尝试所有:1) 测试字节范围:这是您的解决方案,可能是最快的解决方案:s := "12asdf"fmt.Println(s[0] >= '0' && s[0] <= '9')2)使用fmt.Sscanf():注意:如果string以负数开头,这也接受,决定它是否对你来说是一个问题(例如 accepts "-12asf")。i := 0n, err := fmt.Sscanf(s, "%d", &i)fmt.Println(n > 0, err == nil) // Both n and err can be used to test3)使用unicode.IsDigit():fmt.Println(unicode.IsDigit(rune(s[0])))4)使用regexp:我可能永远不会使用它,因为这是迄今为止最慢的,但它是:r := regexp.MustCompile(`^\d`)fmt.Println(r.FindString(s) != "")或者:r := regexp.MustCompile(`^\d.*`)fmt.Println(r.MatchString(s))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go