改版前v1.0.1
改版后v1.0.4
树结构v1.0.5
注意:
1. 规则a.b代表a对象里面key为b的数据,a.*.b代表a数组中对象里面key为b的数据(全局通用)
2. 验证参数存在 param.Field("fieldName") 时,fieldName 必须存在验证规则中
引入
import "github.com/goodluckxu-go/validator"
添加全局验证器
validator.RegisterMethod("test", func(d *validator.Data, args ...interface{}) error {
return nil
})
调用方法
// data只能有map[string]interface{},[]interface{},interface{}三种类型时字符串类型的数字可转化
var data interface{}
var dataIn int
valid := validator.New().
SetRequest(req). // *http.Request,不设置则验证传入data数据的值
SetData(&data).
SetRules([]validator.Rule{
{Field:""}, //空字符串代表验证最外层(全部)
{Field: "list.*.b.*.a", Methods: validator.Method.List(
validator.Method.SetMethod("required"), // 常规验证
validator.Method.SetMethod("test"), // 添加的全局验证
//args表示外部传入的任意参数
validator.Method.SetFun(func(d *validator.Data, args ...interface{}) error {
a, _ := args[0].(*int)
*a = 10
return nil
}, &dataIn), // 自定义验证
), Notes: "测试"},
}). // 不传规则则是赋值
SetMessages([]validator.Message{ // 只会生效最后一条
{"list.*.b.*.a.required", "必填"}, // 其中*代表list1列表的所有的b数组中所有的a的required规则错误注释被替换
{"list.*.b.0.a.required", "必填1"},// 其中*代表list1列表的所有的b数组中第0位的a的required规则错误注释被替换
}).
Valid()
{
"c": "111",
"list": [
{
"a": {
"a": 1,
"b": 2,
"c": 3
},
"b": [
{
"a": 5,
"b": 6
},
{
"a": 5,
"b": 7
},
{
"a": 5,
"b": 8
}
]
},
{
"a": {
"a": 1,
"b": 2,
"c": 3
},
"b": [
{
"a": 5,
"b": 16
},
{
"a": 5,
"b": 17
},
{
"a": 5,
"b": 18
}
]
}
]
}
获取所有数据
根据key获取数据
例如:传 list.*.b. *.b ,获得
[
{"Path":"list.0.b.0.b","Data":6},
{"Path":"list.0.b.1.b","Data":7},
{"Path":"list.0.b.2.b","Data":8},
{"Path":"list.1.b.0.b","Data":16},
{"Path":"list.1.b.1.b","Data":17},
{"Path":"list.1.b.2.b","Data":18}
]
获取两个值最近的公共数据
例如:当期验证数据list.0.a.a,传入list.*.a.b,获取数据则为list.0.a对象
获取和验证同一层级的数据集合
例如:当期验证数据list.0.a.a,传入list.*.a.b,获取数据则为list.0.a.b数据切片
设置验证数据
获取注释
通过path路径获取注释
跳过当前字段的验证
跳过子集验证
valid.Error
validator.SetLangAddr("./zh_cn.json")
语言包json格式参照lang/zh_cn.json文件
valid_condition | required | nullable | in | not_in | unique | email | phone | regexp | not_regexp
array | map | string | number | integer | bool | date | file
args参数说明:
1. &&是并且,||是或者
2. &&和||之间的数据为验证公式,公式结果为布尔型
3. 公式目前占1-3个字符
4. 公式可以直接为true或false
5. 验证公式符号有>,>=,<,<=,=,!=,in,not。例如:>,3表示验证数据大于3;3,>,2表示比较3和2的值;param.Field("a"),>,2表示字段a的值大于2
6. in是在数组里面,not是不再数组里面,其他公式符号都是简单类型数组(string,int等)
7. condition.Brackets表示括号,里面值和args一样规则
8. 所有公式满足为true则验证,否在跳过验证
validator.Method.SetMethod("valid_condition", "=", 1, "&&", "<", 10, "&&", param.Field("list.*.a.a"), "=", 12, "&&", condition.Brackets(">", 2)),
验证是否必填。null,字符串为"",数字类型为0,bool类型为false,数组为[],map为{}都不通过 参数为string,number,bool,array,map,代表string为空不验证,number为0不验证,bool为false不验证,array为[]不验证,map为{}不验证
validator.Method.SetMethod("required", "string")
数据为空则不验证后面的规则,字符串为"",数字类型为0,bool类型为false,数组为[],map为{}都不验证后的单规则
validator.Method.SetMethod("nullable")
验证是否在数组里面,参数是slice或array类型
validator.Method.SetMethod("in", []int{1,2,3})
验证是否不在数组里面,参数是slice或array类型
validator.Method.SetMethod("not_in", []int{1,2,3})
验证数组内的值唯一
validator.Method.SetMethod("unique")
验证是否是邮箱
validator.Method.SetMethod("email")
验证是否是手机号
validator.Method.SetMethod("phone")
验证数据在正则表达式中
validator.Method.SetMethod("regexp", `^\d*$`)
验证数据不在正则表达式中
validator.Method.SetMethod("not_regexp", `^\d*$`)
验证是否是数组
validator.Method.SetMethod("array")
验证是否是对象
validator.Method.SetMethod("map")
验证是否是字符串
validator.Method.SetMethod("string")
验证是否是数字。可验证数字和字符串的数字,如果接受数据为map[string]interface{},[]interface{},interface{}验证后会转换成float64
validator.Method.SetMethod("number")
验证是否是整数。可验证数字和字符串的数字,如果接受数据为map[string]interface{},[]interface{},interface{}验证后会转换成int64
validator.Method.SetMethod("integer")
验证是否是布尔类型。可验证整数和布尔类型
validator.Method.SetMethod("bool")
验证是否是日期格式 args参数Y-m-d H:i:s类型,Y年,m月,d日,H时,i分,s秒
validator.Method.SetMethod("date")
验证是否是文件
validator.Method.SetMethod("file")
验证两个字段是否相同,参数可以是param.Field("test")字段值
validator.Method.SetMethod("eq",5)
验证是否大于某个数。可验证数字,字符串的数字或日期,参数可以是param.Field("test"),time.Time字段值
validator.Method.SetMethod("gt",5)
验证是否大于等于某个数。可验证数字和字符串的数字或日期,参数可以是param.Field("test"),time.Time字段值
validator.Method.SetMethod("gte",5)
验证是否小于某个数。可验证数字和字符串的数字或日期,参数可以是param.Field("test"),time.Time字段值
validator.Method.SetMethod("lt",5)
验证是否小于等于某个数。可验证数字和字符串的数字或日期,参数可以是param.Field("test"),time.Time字段值
validator.Method.SetMethod("lte",5)
验证是长度等于某个数。可获取字符串和数组长度或者文件大小(单位: kb)
validator.Method.SetMethod("len", 5)
验证是长度大于等于某个数。可获取字符串和数组长度或者文件大小(单位: kb)
validator.Method.SetMethod("min", 5)
验证是长度小于等于某个数。可获取字符串和数组长度或者文件大小(单位: kb)
validator.Method.SetMethod("max", 5)
验证文件后缀类型,可为多个
validator.Method.SetMethod("suffix", "jpg","png")
验证文件协议类型,可为多个
validator.Method.SetMethod("mime", "image/jpeg","image/png")