切换导航
{{systemName}}
{{ info.Title }}
{{info.Title}}
{{ menu.Title }}
{{menu.Title}}
登录
|
退出
搜索
golang之数据验证validator
作者:ych
#### 使用示例 ``` package main import ( "fmt" "github.com/go-playground/validator/v10" ) type Users struct { Phone string `form:"phone" json:"phone" validate:"required"` Passwd string `form:"passwd" json:"passwd" validate:"required,max=20,min=6"` Code string `form:"code" json:"code" validate:"required,len=6"` } func main() { users := &Users{ Phone: "1326654487", Passwd: "123", Code: "123456", } validate := validator.New() err := validate.Struct(users) if err != nil { for _, err := range err.(validator.ValidationErrors) { fmt.Println(err)//Key: 'Users.Passwd' Error:Field validation for 'Passwd' failed on the 'min' tag return } } return } ``` #### 验证规则 字段|含义|例子 -|-|- required |必填| email|验证字符串是email格式|例:“email” url|这将验证字符串值包含有效的网址|例:“url” max|字符串最大长度|例:“max=20” min|字符串最小长度|例:“min=6” excludesall|不能包含特殊字符|例:“excludesall=0x2C”//注意这里用十六进制表示。 len|字符长度必须等于n,或者数组、切片、map的len值为n,即包含的项目数|例:“len=6” eq|数字等于n,或者或者数组、切片、map的len值为n,即包含的项目数|例:“eq=6” ne|数字不等于n,或者或者数组、切片、map的len值不等于为n,即包含的项目数不为n,其和eq相反|例:“ne=6” gt|数字大于n,或者或者数组、切片、map的len值大于n,即包含的项目数大于n|例:“gt=6” gte|数字大于或等于n,或者或者数组、切片、map的len值大于或等于n,即包含的项目数大于或等于 n|例:“gte=6” lt|数字小于n,或者或者数组、切片、map的len值小于n,即包含的项目数小于n|例:“lt=6” lte|数字小于或等于n,或者或者数组、切片、map的len值小于或等于n,即包含的项目数小于或等于* n|例:“lte=6” #### 跨字段验证 字段|含义 -|- eqfield=Field | 必须等于 Field 的值; nefield=Field | 必须不等于 Field 的值; gtfield=Field | 必须大于 Field 的值; gtefield=Field | 必须大于等于 Field 的值; ltfield=Field | 必须小于 Field 的值; ltefield=Field | 必须小于等于 Field 的值; eqcsfield=Other.Field | 必须等于 struct Other 中 Field 的值; necsfield=Other.Field | 必须不等于 struct Other 中 Field 的值; gtcsfield=Other.Field | 必须大于 struct Other 中 Field 的值; gtecsfield=Other.Field | 必须大于等于 struct Other 中 Field 的值; ltcsfield=Other.Field | 必须小于 struct Other 中 Field 的值; ltecsfield=Other.Field | 必须小于等于 struct Other 中 Field 的值; #### 示例 ``` type UserReg struct { Passwd string `form:"passwd" json:"passwd" validate:"required,max=20,min=6"` Repasswd string `form:"repasswd" json:"repasswd" validate:"required,max=20,min=6,eqfield=Passwd"` } ``` #### 自定义验证类型 ``` package main import ( "fmt" "github.com/go-playground/validator/v10" ) type Users struct { Name string `form:"name" json:"name" validate:"required,CustomValidationErrors"`//包含自定义函数 Age uint8 `form:"age" json:"age" validate:"required,gt=18"` Passwd string `form:"passwd" json:"passwd" validate:"required,max=20,min=6"` Code string `form:"code" json:"code" validate:"required,len=6"` } func main() { users := &Users{ Name: "admin", Age: 12, Passwd: "123", Code: "123456", } validate := validator.New() //注册自定义函数 _=validate.RegisterValidation("CustomValidationErrors", CustomValidationErrors) err := validate.Struct(users) if err != nil { for _, err := range err.(validator.ValidationErrors) { fmt.Println(err)//Key: 'Users.Name' Error:Field validation for 'Name' failed on the 'CustomValidationErrors' tag return } } return } func CustomValidationErrors(fl validator.FieldLevel) bool { return fl.Field().String() != "admin" } ```
评论区
先去登录
版权所有:机遇屋在线 Copyright © 2021-2025 jiyuwu Co., Ltd.
鲁ICP备16042261号-1