go validator的使用说明及其字段参考

说明
  • 参考文档:https://pkg.go.dev/github.com/go-playground/validator/v10#hdr-StructOnly

  • 使用说明

     

    validate:"Usage" v := validator.New() if err:=v.Struct(user); err !=nil { } err := validate.Var(boolTest, "required") if err != nil { fmt.Println(err) }

tagdescex
required必填Field或Struct validate:"required"
unique保证唯一性,不同类型处理不同; 对于map,unique约束没有重复的value值; 对于数组和切片,没有重复的元素值Field validate:"unique"
omitempty空时忽略Field或Struct validate:"omitempty"
len长度Field validate:"len=0"
eq等于Field validate:"eq=0"
gt大于Field validate:"gt=0"
gte大于等于Field validate:"gte=0"
lt小于Field validate:"lt=0"
lte小于等于Field validate:"lte=0"
eqfield同一结构体字段相等Field validate:"eqfield=Field2"
nefield同一结构体字段不相等Field validate:"nefield=Field2"
gtfield大于同一结构体字段Field validate:"gtfield=Field2"
gtefield大于等于同一结构体字段Field validate:"gtefield=Field2"
ltfield小于同一结构体字段Field validate:"ltfield=Field2"
ltefield小于等于同一结构体字段Field validate:"ltefield=Field2"
eqcsfield跨不同结构体字段相等Struct1.Field validate:"eqcsfield=Struct2.Field2"
necsfield跨不同结构体字段不相等Struct1.Field validate:"necsfield=Struct2.Field2"
gtcsfield大于跨不同结构体字段Struct1.Field validate:"gtcsfield=Struct2.Field2"
gtecsfield大于等于跨不同结构体字段Struct1.Field validate:"gtecsfield=Struct2.Field2"
ltcsfield小于跨不同结构体字段Struct1.Field validate:"ltcsfield=Struct2.Field2"
ltecsfield小于等于跨不同结构体字段Struct1.Field validate:"ltecsfield=Struct2.Field2"
min最大值Field validate:"min=1"
max最小值Field validate:"max=2"
structonly仅验证结构体,不验证任何结构体字段Struct validate:"structonly"
nostructlevel不运行任何结构级别的验证Struct validate:"nostructlevel"
dive向下延伸验证,多层向下需要多个dive标记string validate:"gt=0,dive,len=1,dive,required"
dive Keys & EndKeys与dive同时使用,用于对map对象的键的和值的验证,keys为键,endkeys为值map[string]string `validate:”gt=0,dive,keys,eq=1 |
required_with其他字段其中一个不为空且当前字段不为空Field validate:"required_with=Field1 Field2"
required_with_all其他所有字段不为空且当前字段不为空Field validate:"required_with_all=Field1 Field2"
required_without其他字段其中一个为空且当前字段不为空Field `validate:”required_without=Field1 Field2” |
required_without_all其他所有字段为空且当前字段不为空Field validate:"required_without_all=Field1 Field2"
isdefault是默认值Field validate:"isdefault=0"
oneof其中之一Field validate:"oneof=5 7 9"
containsfield字段包含另一个字段Field validate:"containsfield=Field2"
excludesfield字段不包含另一个字段Field validate:"excludesfield=Field2"
unique是否唯一,通常用于切片或结构体Field validate:"unique"
alphanum字符串值是否只包含 ASCII 字母数字字符Field validate:"alphanum"
alphaunicode字符串值是否只包含 unicode 字符Field validate:"alphaunicode"
alphanumunicode字符串值是否只包含 unicode 字母数字字符Field validate:"alphanumunicode"
numeric字符串值是否包含基本的数值Field validate:"numeric"
hexadecimal字符串值是否包含有效的十六进制Field validate:"hexadecimal"
hexcolor字符串值是否包含有效的十六进制颜色Field validate:"hexcolor"
lowercase符串值是否只包含小写字符Field validate:"lowercase"
uppercase符串值是否只包含大写字符Field validate:"uppercase"
email字符串值包含一个有效的电子邮件Field validate:"email"
json字符串值是否为有效的 JSONField validate:"json"
file符串值是否包含有效的文件路径,以及该文件是否存在于计算机上Field validate:"file"
url符串值是否包含有效的 urlField validate:"url"
uri符串值是否包含有效的 uriField validate:"uri"
base64字符串值是否包含有效的 base64值Field validate:"base64"
contains字符串值包含子字符串值Field validate:"contains=@"
containsany字符串值包含子字符串值中的任何字符Field validate:"containsany=abc"
containsrune字符串值包含提供的特殊符号值Field validate:"containsrune=☢"
excludes字符串值不包含子字符串值Field validate:"excludes=@"
excludesall字符串值不包含任何子字符串值Field validate:"excludesall=abc"
excludesrune字符串值不包含提供的特殊符号值Field validate:"containsrune=☢"
startswith字符串以提供的字符串值开始Field validate:"startswith=abc"
endswith字符串以提供的字符串值结束Field validate:"endswith=abc"
ip字符串值是否包含有效的 IP 地址Field validate:"ip"
ipv4字符串值是否包含有效的 ipv4地址Field validate:"ipv4"
datetime字符串值是否包含有效的 日期Field validate:"datetime"

跳过字段

告诉验证跳过此结构字段;这尤其 方便忽略嵌入式结构进行验证。(用法: -)

Usage: -

必填

这将验证该值不是数据类型默认零值。 对于数字,确保值不为零。对于字符串确保值为 不是“”。用于切片、映射、指针、接口、通道和函数 确保该值不为零。

Usage: required

是默认值

这将验证该值是否为默认值,并且几乎是 与必需相反。

Usage: isdefau

长度

对于数字,长度将确保值为 等于给定的参数。对于字符串,它会检查 字符串长度正好是该字符数。对于切片, 数组和映射验证项目数。

示例 #1

Usage: len=10

最大

对于数字,max 将确保该值为 小于或等于给定的参数。对于字符串,它会检查 字符串长度最多为该字符数。为 切片、数组和映射验证项目数。

示例 #1

Usage: max=10

最低

对于数字,min 将确保该值为 大于或等于给定的参数。对于字符串,它会检查 字符串长度至少为该字符数。对于切片, 数组和映射验证项目数。

示例 #1

Usage: min=10

等于

对于字符串和数字,eq 将确保值为 等于给定的参数。对于切片、数组和映射, 验证项数。

示例 #1

Usage: eq=10

示例 #2(时间。持续时间)

为了时间。持续时间,eq 将确保该值等于给定的持续时间 在参数中。

Usage: eq=1h30m

不等于

对于字符串和数字,ne 将确保值不是 等于给定的参数。对于切片、数组和映射, 验证项数。

示例 #1

Usage: ne=10

不等于

对于字符串和数字,ne 将确保值不是 等于给定的参数。对于切片、数组和映射, 验证项数。

示例 #1

Usage: ne=10

大于

对于数字,这将确保该值大于 给出的参数。对于字符串,它检查字符串长度 大于该字符数。对于切片、数组 并映射它验证项目的数量。

示例 #1

Usage: gt=10

大于或等于

与上面的“min”相同。保留两者以使带有“len”的术语更容易。

示例 #1

Usage: gte=10

小于

对于数字,这将确保该值小于给定的参数。 对于字符串,它会检查字符串长度是否小于该数 字符。对于切片、数组和映射,它会验证项目数。

示例 #1

Usage: lt=10

小于或等于

与上面的“最大值”相同。保留两者以使带有“len”的术语更容易。

Usage: lte=10

独特

对于数组和切片,unique将确保没有重复项。 对于地图,唯一将确保没有重复值。 对于结构切片,unique 将确保没有重复值 在通过参数指定的结构的字段中。

// For arrays, slices, and maps: Usage: unique // For slices of struct: Usage: unique=field

这将验证字符串值是否仅包含数字值。 对于整数或浮点数,它返回 true。

Usage: number

数值的

这将验证字符串值是否包含基本数值。 基本排除指数等... 对于整数或浮点数,它返回 true。

Usage: numeric

小写字符串

这将验证字符串值是否仅包含小写字符。空字符串不是有效的小写字符串。

Usage: lowercase

大写字符串

这将验证字符串值是否仅包含大写字符。空字符串不是有效的大写字符串。

Usage: uppercase

电子邮件字符串

这将验证字符串值是否包含有效的电子邮件 这可能不符合任何 rfc 标准的所有可能性,但都不符合 是否有任何电子邮件提供商接受所有可能性。

Usage: email

JSON 字符串

这将验证字符串值是否有效 JSON

Usage: json

开头为

这将验证字符串值是否以提供的字符串值开头

Usage: startswith=hello

结尾为

这将验证字符串值是否以提供的字符串值结尾

Usage: endswith=goodbye

不以 开头

这将验证字符串值是否不以提供的字符串值开头

Usage: startsnotwith=hello

不以

这将验证字符串值是否不以提供的字符串值结尾

Usage: endsnotwith=goodbye

日期时间

这将根据提供的日期时间格式验证字符串值是否为有效的日期时间。 提供的格式必须与官方 Go 计时格式布局匹配,如 https://golang.org/pkg/time/ 中所述

Usage: datetime=2006-01-02

时区

这将验证字符串值是否为基于系统上存在的时区数据库的有效时区。 尽管空值和本地值是时间允许的。加载位置 golang 函数,此验证器不允许它们。 有关 https://golang.org/pkg/time/#LoadLocation 的更多信息

 

Usage: timezone

自定义
 

// 注册自定义验证函数

 

Deadline string json:"deadline" validate:"datetime=2006-01-02 15:04:05,required,customDeadlineValidator" //截止日期 validate.RegisterValidation("customDeadlineValidator", customDeadlineValidator)

 

/ 检查是否大于当前时间 func customDeadlineValidator(fl validator.FieldLevel) bool { if deadlineStr, ok := fl.Field().Interface().(string); ok { // 解析截止日期字符串为time.Time类型 deadline, err := time.Parse("2006-01-02 15:04:05", deadlineStr) if err != nil { return false } // 获取当前时间 currentTime := time.Now() // 比较截止日期与当前时间 if deadline.After(currentTime) { return true } } return false }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值