Golang验证库go-playground/validator验证规则

作者: adm 分类: go 发布时间: 2023-11-05

一、验证规则

标记之间特殊符号说明

逗号( , ):把多个验证标记隔开。注意:隔开逗号之间不能有空格, validate:"lt=0,gt=100",逗号那里不能有空格,否则panic
横线( - ):跳过该字段不验证
竖线( | ):使用多个验证标记,但是只需满足其中一个即可
required:表示该字段值必输设置,且不能为默认值
omitempty:如果字段未设置,则忽略它

范围比较验证

doc: https://github.com/go-playground/validator/blob/master/README.md#comparisons

范围验证: 切片、数组和map、字符串,验证其长度;数值,验证大小范围

lte:小于等于参数值,validate:"lte=3" (小于等于3)
gte:大于等于参数值,validate:"lte=0,gte=120" (大于等于0小于等于120)
lt:小于参数值,validate:"lt=3" (小于3)
gt:大于参数值,validate:"lt=0,gt=120" (大于0小于120)
len:等于参数值,validate:"len=2"
max:大于等于参数值,validate:"max=2" (大于等于2)
min:小于等于参数值,validate:"min=2,max=10" (大于等于2小于等于10)
ne:不等于,validate:"ne=2" (不等于2)
oneof:只能是列举出的值其中一个,这些值必须是数值或字符串,以空格分隔,如果字符串中有空格,将字符串用单引号包围,validate:"oneof=red green"

例子:

type User struct {
 Name string `json:"name" validate:"min=0,max=35"`
 Age unit8 `json:"age" validate:"lte=0,gte=90"`
}

更多功能请参看文档 validator comparisons doc

字符串验证

contains:包含参数子串,validate:"contains=tom" (字段的字符串值包含tom)
excludes:包含参数子串,validate:"excludes=tom" (字段的字符串值不包含tom)
startswith:以参数子串为前缀,validate:"startswith=golang"
endswith:以参数子串为后缀,validate:"startswith=world"

例子:

type User struct { 
 Name string `validate:"contains=tom"` 
 Age int `validate:"min=1"`
}

更多功能请参看文档 validator strings doc

字段验证


eqcsfield:跨不同结构体字段验证,比如说 Struct1 Filed1,与结构体Struct2 Field2相等,

type Struct1 struct {
 Field1 string `validate:eqcsfield=Struct2.Field2`
 Struct2 struct {
 Field2 string 
 }
}
necsfield:跨不同结构体字段不相等
eqfield:同一结构体字段验证相等,最常见的就是输入2次密码验证
type User struct { 
 Name string `validate:"lte=4"` 
 Age int `validate:"min=20"` 
 Password string `validate:"min=10"`
 Password2 string `validate:"eqfield=Password"`
}
nefield:同一结构体字段验证不相等

type User struct {
 Name string `validate:"lte=4"` 
 Age int `validate:"min=20"` 
 Password string `validate:"min=10,nefield=Name"`
}
gtefield:大于等于同一结构体字段,validate:"gtefiled=Field2"
ltefield:小于等于同一结构体字段

更多功能请参看文档:validator Fields DOC

网络验证


ip:字段值是否包含有效的IP地址,validate:"ip"
ipv4:字段值是否包含有效的ipv4地址,validate:"ipv4"
ipv6:字段值是否包含有效的ipv6地址,validate:"ipv6"
uri:字段值是否包含有效的uri,validate:"uri"
url:字段值是否包含有效的uri,validate:"url"

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!