先还原对gvalid.Check()的修改。

This commit is contained in:
hailaz
2019-07-13 10:48:46 +08:00
parent 0b8ca3313e
commit 32d5b28423

View File

@ -7,7 +7,6 @@
package gvalid
import (
"reflect"
"regexp"
"strconv"
"strings"
@ -18,7 +17,6 @@ import (
"github.com/gogf/gf/g/net/gipv6"
"github.com/gogf/gf/g/os/gtime"
"github.com/gogf/gf/g/text/gregex"
"github.com/gogf/gf/g/text/gstr"
"github.com/gogf/gf/g/util/gconv"
)
@ -107,55 +105,7 @@ var (
}
)
// 检测单条数据
// value数据类型可以为map、array、slice以及其它基本数据类型
func Check(value interface{}, rules string, msgs interface{}, params ...interface{}) *Error {
rv := reflect.ValueOf(value)
switch rv.Kind() {
case reflect.Array, reflect.Slice: // Array/Slice 遍历调用
for i := 0; i < rv.Len(); i++ {
err := Check(rv.Index(i).Interface(), rules, msgs, params...)
if err != nil {
return err
}
}
return nil
case reflect.Map: // Map 遍历调用
iter := rv.MapRange()
for iter.Next() {
err := Check(iter.Value().Interface(), rules, msgs, params...)
if err != nil {
return err
}
}
return nil
case reflect.Ptr: // Ptr
rv := rv.Elem()
array := make([]interface{}, 0)
switch rv.Kind() {
case reflect.Slice, reflect.Array:
for i := 0; i < rv.Len(); i++ {
array = append(array, rv.Index(i).Interface())
}
return Check(array, rules, msgs, params...)
case reflect.Struct:
rt := rv.Type()
for i := 0; i < rv.NumField(); i++ {
// Only public attributes.
if !gstr.IsLetterUpper(rt.Field(i).Name[0]) {
continue
}
array = append(array, rv.Field(i).Interface())
}
return Check(array, rules, msgs, params...)
}
return nil
}
return doCheckSingleRule(value, rules, msgs, params...)
}
// 检测单条数据的规则:
// 基本数据类型校验
//
// 1. value为需要校验的数据可以为任意基本数据类型
@ -164,7 +114,7 @@ func Check(value interface{}, rules string, msgs interface{}, params ...interfac
// 允许传递多个自定义的错误信息如果类型为string那么中间使用"|"符号分隔多个自定义错误;
//
// 3. params参数为联合校验参数支持任意的map/struct/*struct类型对于需要联合校验的规则有效required-*、same、different
func doCheckSingleRule(value interface{}, rules string, msgs interface{}, params ...interface{}) *Error {
func Check(value interface{}, rules string, msgs interface{}, params ...interface{}) *Error {
// 内部会将参数全部转换为字符串类型进行校验
val := strings.TrimSpace(gconv.String(value))
data := make(map[string]string)