string - 戈兰 : verify that string is a valid hex string?

标签 string go validation hex

我有一个结构:

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/

相关文章:

javascript - asp.net 中的按钮有时不起作用

javascript - 为什么选择的选项隐藏在 react 中?

c - 为什么会发生堆损坏?

java正则表达式从文本中检索链接

encryption - 输入字节 0 处的 golang 非法 base64 数据

json - 在服务器上加载 CSV 数据,将数据转换为 JSON 并使用 Golang 使用 Json 查询获取结果

string - Data.Text 的好处

c - 交换字符串

go - Kubernetes 客户端代码生成器 : Can the code exist only locally and not on a repository for the core-generator to work?

debugging - 您如何处理间歇性错误?