作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个结构:
type Name struct {
hexID string
age uint8
}
检查 hexID
字段是否为有效的十六进制字符串的最简单方法是什么?如果没有 - 则会出现错误。
例如:
var n Name
n.hexID = "Hello World >)" // not a valid hex
n.hexID = "aaa12Eb9990101010101112cC" // valid hex
或者也许某个地方存在 struct tag
?
最佳答案
迭代字符串的字符,并检查每个字符是否是有效的十六进制数字。
func isValidHex(s string) bool {
for _, r := range s {
if !(r >= '0' && r <= '9' || r >= 'a' && r <= 'f' || r >= 'A' && r <= 'F') {
return false
}
}
return true
}
测试它:
fmt.Println(isValidHex("Hello World >)"))
fmt.Println(isValidHex("aaa12Eb9990101010101112cC"))
输出(在 Go Playground 上尝试):
false
true
注意:您可能会想使用 hex.DecodeString()
并检查返回的错误:如果是nil
,则它是有效的。但请注意,此函数期望字符串具有偶数长度(因为它从十六进制数字生成字节,并且 2 个十六进制数字形成一个字节)。更不用说如果您不需要结果(作为字节 slice ),这会更慢并且会产生不必要的垃圾(供 gc 收集)。
另一个解决方案可以使用 big.Int.SetString()
:
func isValidHex(s string) bool {
_, ok := new(big.Int).SetString(s, 16)
return ok
}
这输出相同,请在 Go Playground 上尝试一下。但这又比较慢并且使用内存分配(生成垃圾)。
关于string - 戈兰 : verify that string is a valid hex string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75157193/
我是一名优秀的程序员,十分优秀!