验证规则
说明
文档列举了一些常用的验证规则,可以完成大部分场景的验证需求,更多规则请查看 GitHub
操作符说明
符号 | 说明 |
---|---|
, | 把多个验证标记隔开,注意逗号之间不能有空格 |
| | 使用多个验证标记,但是只需满足其中一个即可 |
- | 跳过该字段不验证 |
常用规则说明
规则 | 说明 | 举例 |
---|---|---|
required | 必填 | Field或Struct v:"required" |
omitempty | 空时忽略 | Field或Struct v:"omitempty" |
len | 长度 | Field v:"len=0" |
eq | 等于 | Field v:"eq=0" |
gt | 大于 | Field v:"gt=0" |
gte | 大于等于 | Field v:"gte=0" |
lt | 小于 | Field v:"lt=0" |
lte | 小于等于 | Field v:"lte=0" |
eqfield | 同一结构体字段相等 | Field v:"eqfield=Field2" |
nefield | 同一结构体字段不相等 | Field v:"nefield=Field2" |
gtfield | 大于同一结构体字段 | Field v:"gtfield=Field2" |
gtefield | 大于等于同一结构体字段 | Field v:"gtefield=Field2" |
ltfield | 小于同一结构体字段 | Field v:"ltfield=Field2" |
ltefield | 小于等于同一结构体字段 | Field v:"ltefield=Field2" |
eqcsfield | 跨不同结构体字段相等 | Struct1.Field v:"eqcsfield=Struct2.Field2" |
necsfield | 跨不同结构体字段不相等 | Struct1.Field v:"necsfield=Struct2.Field2" |
gtcsfield | 大于跨不同结构体字段 | Struct1.Field v:"gtcsfield=Struct2.Field2" |
gtecsfield | 大于等于跨不同结构体字段 | Struct1.Field v:"gtecsfield=Struct2.Field2" |
ltcsfield | 小于跨不同结构体字段 | Struct1.Field v:"ltcsfield=Struct2.Field2" |
ltecsfield | 小于等于跨不同结构体字段 | Struct1.Field v:"ltecsfield=Struct2.Field2" |
min | 最小值(注意您的描述可能有误,应该是“最小值”而非“最大值”) | Field v:"min=1" |
max | 最大值(注意您的描述可能有误,应该是“最大值”而非“最小值”) | Field v:"max=2" |
structonly | 仅验证结构体,不验证任何结构体字段 | Struct v:"structonly" |
nostructlevel | 不运行任何结构级别的验证 | Struct v:"nostructlevel" |
dive | 向下延伸验证,多层向下需要多个dive标记 | [][]string v:"gt=0,dive,len=1,dive,required" |
dive Keys & EndKeys | 与dive同时使用,用于对map对象的键的和值的验证,keys为键,endkeys为值 | map[string]string v:"gt=0,dive,keys,eq=1|eq=2,endkeys,required" |
required_with | 其他字段其中一个不为空且当前字段不为空 | Field v:"required_with=Field1 Field2" |
required_with_all | 其他所有字段不为空且当前字段不为空 | Field v:"required_with_all=Field1 Field2" |
required_without | 其他字段其中一个为空且当前字段不为空 | Field v:"required_without=Field1 Field2" |
required_without_all | 其他所有字段为空且当前字段不为空 | Field v:"required_without_all=Field1 Field2" |
isdefault | 是默认值 | Field v:"isdefault=0" |
oneof | 其中之一 | Field v:"oneof=5 7 9" |
containsfield | 字段包含另一个字段 | Field v:"containsfield=Field2" |
excludesfield | 字段不包含另一个字段 | Field v:"excludesfield=Field2" |
unique | 是否唯一,通常用于切片或结构体 | Field v:"unique" |
alphanum | 字符串值是否只包含 ASCII 字母数字字符 | Field v:"alphanum" |
alphaunicode | 字符串值是否只包含 unicode 字符 | Field v:"alphaunicode" |
alphanumunicode | 字符串值是否只包含 unicode 字母数字字符 | Field v:"alphanumunicode" |
numeric | 字符串值是否包含基本的数值 | Field v:"numeric" |
hexadecimal | 字符串值是否包含有效的十六进制 | Field v:"hexadecimal" |
hexcolor | 字符串值是否包含有效的十六进制颜色 | Field v:"hexcolor" |
lowercase | 字符串值是否只包含小写字符 | Field v:"lowercase" |
uppercase | 字符串值是否只包含大写字符 | Field v:"uppercase" |
字符串值包含一个有效的电子邮件 | Field v:"email" | |
json | 字符串值是否为有效的 JSON | Field v:"json" |
file | 字符串值是否包含有效的文件路径,以及该文件是否存在于计算机上 | Field v:"file" |
url | 字符串值是否包含有效的 url | Field v:"url" |
uri | 字符串值是否包含有效的 uri | Field v:"uri" |
base64 | 字符串值是否包含有效的 base64值 | Field v:"base64" |
contains | 字符串值包含子字符串值 | Field v:"contains=@" |
containsany | 字符串值包含子字符串值中的任何字符 | Field v:"containsany=abc" |
containsrune | 字符串值包含提供的特殊符号值 | Field v:"containsrune=☢" |
excludes | 字符串值不包含子字符串值 | Field v:"excludes=@" |
excludesall | 字符串值不包含任何子字符串值 | Field v:"excludesall=abc" |
excludesrune | 字符串值不包含提供的特殊符号值 | Field v:"excludesrune=☢" |
startswith | 字符串以提供的字符串值开始 | Field v:"startswith=abc" |
endswith | 字符串以提供的字符串值结束 | Field v:"endswith=abc" |
ip | 字符串值是否包含有效的 IP 地址 | Field v:"ip" |
ipv4 | 字符串值是否包含有效的 ipv4地址 | Field v:"ipv4" |
datetime | 字符串值是否包含有效的 日期 | Field v:"datetime" |