From d1c05ad71de4ef87ffd4ba33fddc718ae4d310c1 Mon Sep 17 00:00:00 2001 From: John Date: Sun, 12 Aug 2018 17:17:17 +0800 Subject: [PATCH] =?UTF-8?q?gvalid=E5=A2=9E=E5=8A=A0=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E5=88=AB=E5=90=8D=EF=BC=8C=E7=94=A8=E4=BA=8E?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E8=BF=94=E5=9B=9E=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=EF=BC=8C=E5=B9=B6=E6=9B=B4=E6=96=B0WebServer?= =?UTF-8?q?=E4=B8=AD=E7=9B=B8=E5=85=B3=E4=BD=BF=E7=94=A8=E7=9A=84=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/util/gvalid/gvalid.go | 19 +++++++++++++++---- .../server/request/request_validation.go | 8 ++++---- geg/other/test.go | 9 ++++++++- geg/util/gvalid/gvalid_struct.go | 8 ++++---- 4 files changed, 31 insertions(+), 13 deletions(-) diff --git a/g/util/gvalid/gvalid.go b/g/util/gvalid/gvalid.go index 23f0119a1..6c0aff14b 100644 --- a/g/util/gvalid/gvalid.go +++ b/g/util/gvalid/gvalid.go @@ -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) } diff --git a/geg/net/ghttp/server/request/request_validation.go b/geg/net/ghttp/server/request/request_validation.go index 1e867f34a..82446d0e4 100644 --- a/geg/net/ghttp/server/request/request_validation.go +++ b/geg/net/ghttp/server/request/request_validation.go @@ -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() diff --git a/geg/other/test.go b/geg/other/test.go index 744fb4fea..b486b991c 100644 --- a/geg/other/test.go +++ b/geg/other/test.go @@ -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) } \ No newline at end of file diff --git a/geg/util/gvalid/gvalid_struct.go b/geg/util/gvalid/gvalid_struct.go index d687c32e3..4d3ead963 100644 --- a/geg/util/gvalid/gvalid_struct.go +++ b/geg/util/gvalid/gvalid_struct.go @@ -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() {