一、验证规则
标记之间特殊符号说明
, 注意validate:"lt=0,gt=100"-|范围比较验证
doc: https://github.com/go-playground/validator/blob/master/README.md#comparisons
范围验证: 切片、数组和map、字符串,验证其长度;数值,验证大小范围
validate:"lte=3"validate:"lte=0,gte=120"validate:"lt=3"validate:"lt=0,gt=120"validate:"len=2"validate:"max=2"validate:"min=2,max=10"validate:"ne=2"validate:"oneof=red green"例子:
更多功能请参看文档 validator comparisons doc
字符串验证
doc: https://github.com/go-playground/validator/blob/master/README.md#strings
validate:"contains=tom"validate:"excludes=tom"validate:"startswith=golang"validate:"startswith=world"例子:
更多功能请参看文档 validator strings doc
字段验证
doc: https://github.com/go-playground/validator/blob/master/README.md#fields
eqcsfield:跨不同结构体字段验证,比如说 Struct1 Filed1,与结构体Struct2 Field2相等,
- necsfield:跨不同结构体字段不相等
- eqfield:同一结构体字段验证相等,最常见的就是输入2次密码验证
nefield:同一结构体字段验证不相等
validate:"gtefiled=Field2"更多功能请参看文档:validator Fields DOC
网络验证
doc: https://github.com/go-playground/validator/blob/master/README.md#network
validate:"ip"validate:"ipv4"validate:"ipv6"validate:"uri"validate:"url"二、中文
根据文档书写统一工具
type ValidateCtx struct {
*validator.Validate
trans ut.Translator
}
func LoadValidator() {
zhTranslator := zh.New()
uni := ut.New(zhTranslator, zhTranslator)
trans, _ := uni.GetTranslator("zh")
validate := validator.New()
//通过自定义标签label来替换字段名
validate.RegisterTagNameFunc(func(fld reflect.StructField) string {
name := strings.SplitN(fld.Tag.Get("label"), ",", 2)[0]
if name == "-" {
return ""
}
return name
})
_ = zhTranslations.RegisterDefaultTranslations(validate, trans)
G_Validate = &ValidateCtx{validate,trans}
}
func (vc *ValidateCtx)GetError(errs error) string {
errStr :=""
for _, err := range errs.(validator.ValidationErrors) {
if vc.trans!=nil {
errStr = err.Translate(vc.trans)
}else{
errStr = err.Field()+"验证不符合"+err.Tag()
}
break
}
return errStr
}使用
定义结构体,label替代字段英文
type adminExtend struct {
Roles string `json:"roles" validate:"required" label:"所属角色"`
Struct string `json:"struct" validate:"required" label:"组织架构"`
Pos string `json:"pos" validate:"required" label:"岗位"`
Pwd string `json:"pwd" validate:"omitempty,min=6,max=12" label:"密码"`
}extend := &adminExtend{}
err := ctx.ShouldBindBodyWith(extend, binding.JSON)
if err != nil {
return errors.New("数据绑定错误")
}
err1 := core.G_Validate.Struct(extend)
if err1 != nil {
return errors.New(core.G_Validate.GetError(err1))
}