9
9
10
10
Go通用的数据验证与过滤库,使用简单,内置大部分常用验证器、过滤器,支持自定义消息、字段翻译。
11
11
12
+ - 简单方便,支持前置验证检查, 支持添加自定义验证器
12
13
- 支持验证 ` Map ` ` Struct ` ` Request ` (` Form ` ,` JSON ` ,` url.Values ` , ` UploadedFile ` )数据
14
+ - 支持检查 slice 中的每个子项值. eg: ` v.StringRule("tags.*", "required|string|minlen:1") `
13
15
- 验证 ` http.Request ` 时会自动根据请求数据类型 ` Content-Type ` 收集数据
14
- - 简单方便,支持前置验证检查, 支持添加自定义验证器
15
16
- 支持将规则按场景进行分组设置,不同场景验证不同的字段
16
17
- 已经内置了超多(** >70** 个)常用的验证器,查看 [ 内置验证器] ( #built-in-validators )
17
18
- 支持在进行验证前对值使用过滤器进行净化过滤,适应更多场景
@@ -34,18 +35,17 @@ Please see the English introduction **[README](README.md)**
34
35
35
36
## 验证结构体(Struct)
36
37
37
- 结构体可以实现3个接口方法,方便做一些自定义:
38
+ 在结构体上添加 ` validate ` 标签,可以快速对一个结构体进行验证设置。
38
39
39
- - ` ConfigValidation(v *Validation) ` 将在创建验证器实例后调用
40
- - ` Messages() map[string]string ` 可以自定义验证器错误消息
41
- - ` Translates() map[string]string ` 可以自定义字段映射/翻译
40
+ ### 使用标签快速配置验证
42
41
43
- ** ` v1.2.1+ ` 更新 ** :
42
+ 可以搭配使用 ` message ` 和 ` label ` 标签,快速配置结构体的字段翻译和错误消息。
44
43
45
44
- 支持通过结构体配置字段输出名称,默认读取 ` json ` 标签的值
46
45
- 支持通过结构体的 ` message ` tag 配置错误消息
47
46
- 支持通过结构体的 ` label ` tag 字段映射/翻译
48
47
48
+ ** 代码示例** :
49
49
50
50
``` go
51
51
package main
@@ -59,18 +59,60 @@ import (
59
59
60
60
// UserForm struct
61
61
type UserForm struct {
62
- Name string ` validate:"required|minLen:7 "`
62
+ Name string ` validate:"required|min_len:7" message:"required:{field} is required" label:"用户名称 "`
63
63
Email string ` validate:"email" message:"email is invalid" label:"用户邮箱"`
64
- Age int ` validate:"required|int|min:1|max:99" message:"int:age must int| min: age min value is 1"`
64
+ Age int ` validate:"required|int|min:1|max:99" message:"int:age must int|min:age min value is 1"`
65
65
CreateAt int ` validate:"min:1"`
66
+ Safe int ` validate:"-"` // 标记字段安全无需验证
67
+ UpdateAt time.Time ` validate:"required" message:"update time is required"`
68
+ Code string ` validate:"customValidator"`
69
+ // 结构体嵌套
70
+ ExtInfo struct {
71
+ Homepage string ` validate:"required" label:"用户主页"`
72
+ CityName string
73
+ } ` validate:"required" label:"扩展信息"`
74
+ }
75
+
76
+ // CustomValidator custom validator in the source struct.
77
+ func (f UserForm ) CustomValidator (val string ) bool {
78
+ return len (val) == 4
79
+ }
80
+ ```
81
+
82
+ ### 使用结构体方法配置验证
83
+
84
+ 结构体可以实现3个接口方法,方便做一些自定义:
85
+
86
+ - ` ConfigValidation(v *Validation) ` 将在创建验证器实例后调用
87
+ - ` Messages() map[string]string ` 可以自定义验证器错误消息
88
+ - ` Translates() map[string]string ` 可以自定义字段映射/翻译
89
+
90
+ ** 代码示例** :
91
+
92
+ ``` go
93
+ package main
94
+
95
+ import (
96
+ " fmt"
97
+ " time"
98
+
99
+ " github.com/gookit/validate"
100
+ )
101
+
102
+ // UserForm struct
103
+ type UserForm struct {
104
+ Name string ` validate:"required|minLen:7"`
105
+ Email string ` validate:"email"`
106
+ Age int ` validate:"required|int|min:1|max:99"`
66
107
Safe int ` validate:"-"`
108
+ CreateAt int ` validate:"min:1"`
67
109
UpdateAt time.Time ` validate:"required"`
68
110
Code string ` validate:"customValidator"` // 使用自定义验证器
69
111
// 结构体嵌套
70
112
ExtInfo struct {
71
113
Homepage string ` validate:"required"`
72
114
CityName string
73
- }
115
+ } ` validate:"required" `
74
116
}
75
117
76
118
// CustomValidator 定义在结构体中的自定义验证器
@@ -80,7 +122,10 @@ func (f UserForm) CustomValidator(val string) bool {
80
122
81
123
// ConfigValidation 配置验证
82
124
// - 定义验证场景
125
+ // - 也可以添加验证设置
83
126
func (f UserForm ) ConfigValidation (v *validate .Validation ) {
127
+ // v.StringRule()
128
+
84
129
v.WithScenes (validate.SValues {
85
130
" add" : []string {" ExtInfo.Homepage" , " Name" , " Code" },
86
131
" update" : []string {" ExtInfo.CityName" , " Name" },
@@ -103,14 +148,19 @@ func (f UserForm) Translates() map[string]string {
103
148
" ExtInfo.Homepage" : " 用户主页" ,
104
149
}
105
150
}
151
+ ```
106
152
153
+ ### 创建和调用验证
154
+
155
+ ``` go
107
156
func main () {
108
157
u := &UserForm{
109
158
Name: " inhere" ,
110
159
}
111
160
112
161
// 创建 Validation 实例
113
162
v := validate.Struct (u)
163
+ // 或者使用
114
164
// v := validate.New(u)
115
165
116
166
if v.Validate () { // 验证成功
@@ -335,7 +385,7 @@ type GlobalOption struct {
335
385
}
336
386
```
337
387
338
- 如何配置:
388
+ ** 如何配置** :
339
389
340
390
``` go
341
391
// 更改全局选项
@@ -353,9 +403,11 @@ type GlobalOption struct {
353
403
import " github.com/gookit/validate/locales/zhcn"
354
404
355
405
// for all Validation.
356
- // NOTICE: must be register before on validate.New()
406
+ // NOTICE: 必须在调用 validate.New() 前注册, 它只需要一次调用。
357
407
zhcn.RegisterGlobal ()
358
408
409
+ // ... ...
410
+
359
411
v := validate.New ()
360
412
361
413
// only for current Validation
@@ -384,6 +436,15 @@ v.AddMessages(map[string]string{
384
436
})
385
437
```
386
438
439
+ - 使用结构体标签: ` message, label `
440
+
441
+ ``` go
442
+ type UserForm struct {
443
+ Name string ` validate:"required|minLen:7" label:"用户名称"`
444
+ Email string ` validate:"email" message:"email is invalid" label:"用户邮箱"`
445
+ }
446
+ ```
447
+
387
448
- 结构体可以通过 ` Messages() ` 方法添加
388
449
389
450
``` go
0 commit comments