Golang如何验证字符串是否为合法十六进制字符串?
十六进制字符串校验方法及结构体tag实现
最简校验方法
直接用Go标准库encoding/hex的DecodeString函数就能完成校验——该函数会在输入不是合法十六进制字符串时返回错误,示例代码如下:
import "encoding/hex" // 校验hexID是否为合法十六进制字符串 func validateHexID(hexStr string) error { _, err := hex.DecodeString(hexStr) return err } // 使用示例 func main() { n := Name{hexID: "Hello World >)"} if err := validateHexID(n.hexID); err != nil { panic(err) // 可根据业务需求替换为自定义错误处理逻辑 } }
注:DecodeString要求输入字符串长度为偶数(每两个十六进制字符对应一个字节),如果你的场景需要支持奇数长度的十六进制字符串,可自行在校验前做补0处理或自定义正则校验。
结构体tag实现校验
Go标准库没有内置的结构体tag校验机制,但可以借助第三方校验库实现。你可以自定义校验规则,通过结构体tag绑定到字段上,示例代码如下:
import ( "encoding/hex" "github.com/go-playground/validator" ) // 自定义十六进制校验函数 func hexIDValidator(fl validator.FieldLevel) bool { hexStr := fl.Field().String() _, err := hex.DecodeString(hexStr) return err == nil } // 全局初始化校验器 var validate *validator.Validate func init() { validate = validator.New() // 注册自定义校验规则 validate.RegisterValidation("hexid", hexIDValidator) } // 带校验tag的结构体定义 type Name struct { hexID string `validate:"hexid"` age uint8 } // 使用示例 func main() { n := Name{hexID: "Hello World >)"} if err := validate.Struct(n); err != nil { panic(err) // 自定义错误处理逻辑 } }
内容的提问来源于stack exchange,提问作者armaka
相关产品推荐
相关产品推荐

