MCPcopy Index your code
hub / github.com/TruthHun/DocHub / Valid

Function Valid

helper/valid.go:79–153  ·  view source on GitHub ↗

参数验证 规则中,required表示必传参数,有无值则是另外一回事 验证规则有以下(大小写不敏感): 1、required 参数必传,有无值则是另外一回事,使用示例:"required" 1、unempty 值不能为空,使用示例:"unempty" 2、min 最小值验证,使用示例:"min:1" 3、max 最大值验证,使用示例:"max:1000" 4、minlen、mincount 最小长度验证,使用示例:"minlen:2" 说明:count是字符个数校验,len是字节个数校验,如"地球",如果是len,则是6个

(params url.Values, rules map[string][]string)

Source from the content-addressed store, hash-verified

77//@return 返回验证后通过的数据
78//@return 返回错误的map
79func Valid(params url.Values, rules map[string][]string) (map[string]interface{}, map[string]string) {
80 var (
81 data map[string]interface{}
82 err error
83 errmsg map[string]string
84 //可以执行类型转换的数据类型
85 typeConvertStr = "int,int8,int32,int64,float32,float64,string"
86 )
87 data = make(map[string]interface{})
88 errmsg = make(map[string]string)
89
90 //为0的字符串和不为0的字符串做数字解析后为0,两种效果是不一样的
91 for key, slice := range rules {
92 var errs []string
93 //如果没有验证规则,则值有则接收,无则不理会
94 l := len(slice)
95 if l == 0 {
96 //如果这个key没有对应规则,key存在,则取值,不存在,则不取
97 if v, ok := params[key]; ok {
98 data[key] = v[0]
99 }
100 } else {
101 //是否必传
102 IsReuqired := false
103 for _, v := range slice {
104 v = strings.ToLower(v)
105 if v == "required" {
106 IsReuqired = true
107 break
108 }
109 }
110
111 //必填字段,也就是key必须传递过来
112 if IsReuqired {
113 if v, ok := params[key]; ok {
114 data[key] = v[0]
115 } else {
116 errs = append(errs, fmt.Sprintf("%v参数必传", key))
117 }
118 }
119 //非必须的情况下,有传递则直接验证
120 if param, ok := params[key]; ok {
121 v := param[0]
122 //数据验证
123 for _, item := range slice {
124 //规则切分,如range:1:10
125 itemSlice := strings.Split(item, ":")
126 err = execValid(v, itemSlice[0], itemSlice[1:]...)
127 if err == nil {
128 data[key] = v
129 } else {
130 errs = append(errs, err.Error())
131 }
132 }
133
134 //类型转换
135 for _, item := range slice {
136 //规则切分,如range:1:10

Callers

nothing calls this directly

Calls 2

execValidFunction · 0.85
execConvertFunction · 0.85

Tested by

no test coverage detected