You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 12:28:20