gvalid增加字段校验别名,用于自定义返回结果字段,并更新WebServer中相关使用的模块

This commit is contained in:
John
2018-08-12 17:17:17 +08:00
parent 4fae1c58fd
commit d1c05ad71d
4 changed files with 31 additions and 13 deletions

View File

@ -436,13 +436,23 @@ func CheckStruct(st interface{}, rules map[string]string, msgs...map[string]inte
for _, field := range fields {
params[field.Name()] = field.Value()
if tag := field.Tag("gvalid"); tag != "" {
match, _ := gregex.MatchString(`([^#]+)#{0,1}(.*)`, tag)
match, _ := gregex.MatchString(`\s*((\w+)\s*@){0,1}\s*([^#]+)\s*(#\s*(.*)){0,1}\s*`, tag)
name := match[2]
rule := match[3]
msg := match[5]
if len(name) == 0 {
name = field.Name()
}
// params参数使用别名**扩容**(而不仅仅使用别名),仅用于验证使用
if _, ok := params[name]; !ok {
params[name] = field.Value()
}
// 校验规则
if _, ok := rules[field.Name()]; !ok {
rules[field.Name()] = match[1]
if _, ok := rules[name]; !ok {
rules[name] = rule
}
// 错误提示
if match[2] != "" {
if len(msg) > 0 {
ruleArray := strings.Split(match[1], "|")
msgArray := strings.Split(match[2], "|")
for k, v := range ruleArray {
@ -457,6 +467,7 @@ func CheckStruct(st interface{}, rules map[string]string, msgs...map[string]inte
}
}
}
}
return CheckMap(params, rules, errMsgs)
}

View File

@ -9,10 +9,10 @@ import (
func main() {
type User struct {
Uid int `gvalid:"min:1"`
Name string `params:"username" gvalid:"required|length:6,30"`
Pass1 string `params:"password1,userpass1" gvalid:"required|password3"`
Pass2 string `params:"password3,userpass2" gvalid:"required|password3|same:Pass1#||两次密码不一致,请重新输入"`
Uid int `gvalid:"uid@min:1"`
Name string `params:"username" gvalid:"username @required|length:6,30"`
Pass1 string `params:"password1" gvalid:"password1@required|password3"`
Pass2 string `params:"password2" gvalid:"password2@required|password3|same:password1#||两次密码不一致,请重新输入"`
}
s := g.Server()

View File

@ -1,9 +1,16 @@
package main
import (
"gitee.com/johng/gf/g/util/gregex"
"fmt"
"gitee.com/johng/gf/g/util/gutil"
)
func main() {
fmt.Println(1)
s := `username @ required|length:6,30 # 请输入用户名称|用户名称长度非法`
match, err := gregex.MatchString(`\s*((\w+)\s*@){0,1}\s*([^#]+)\s*(#\s*(.*)){0,1}\s*`, s)
fmt.Println(err)
gutil.Dump(match)
}

View File

@ -6,10 +6,10 @@ import (
)
type User struct {
Uid int `gvalid:"integer|min:1"`
Name string `gvalid:"required|length:6,30#请输入用户名称|用户名称长度非法"`
Pass1 string `gvalid:"required|password3"`
Pass2 string `gvalid:"required|password3|same:Pass1#||两次密码不一致,请重新输入"`
Uid int `gvalid:"uid @integer|min:1"`
Name string `gvalid:"name @required|length:6,30#请输入用户名称|用户名称长度非法"`
Pass1 string `gvalid:"password1@required|password3"`
Pass2 string `gvalid:"password2@required|password3|same:password1#||两次密码不一致,请重新输入"`
}
func main() {