我们可以将给定的变量当做一个完整的参数进行校验,即单数据校验。如果变量是Struct/Map复杂类型,我们需要校验其内部的属性/键值对的场景,将会在后续章节介绍。单数据校验必须通过Data方法给定被校验数据,Rule方法给定校验规则。单数据校验比较简单,我们来看几个示例。

package main
import (
"fmt"
"github.com/GOgf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gctx"
)
func main() {
var (
ctx = gctx.New()
rule = "length:6,16"
)
if err := g.Validator().Rules(rule).Data("123456").Run(ctx); err != nil {
fmt.Println(err.String())
}
if err := g.Validator().Rules(rule).Data("12345").Run(ctx); err != nil {
fmt.Println(err.String())
}
}执行后,终端输出:
The value `12345` length must be between 6 and 16package main
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gctx"
)
func main() {
var (
ctx = gctx.New()
rule = "integer|between:6,16"
messages = "请输入一个整数|参数大小不对啊老铁"
value = 5.66
)
if err := g.Validator().Rules(rule).Messages(messages).Data(value).Run(ctx); err != nil {
g.Dump(err.Map())
}
}执行后,终端输出:
{
"integer": "请输入一个整数",
"between": "参数大小不对啊老铁",
}可以看到,多个规则以及多个自定义错误提示之间使用英文 | 号进行分割,注意自定义错误提示的顺序和多规则的顺序一一对应。messages参数除了支持string类型以外,还支持map[string]string类型,请看以下例子:
package main
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gctx"
)
func main() {
var (
ctx = gctx.New()
rule = "url|min-length:11"
value = "GoFrame.org"
messages = map[string]string{
"url": "请输入正确的URL地址",
"min-length": "地址长度至少为{min}位",
}
)
if err := g.Validator().Rules(rule).Messages(messages).Data(value).Run(ctx); err != nil {
g.Dump(err.Map())
}
}执行后,终端输出:
{
"url": "请输入正确的URL地址",
}package main
import (
"fmt"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gctx"
)
func main() {
var (
ctx = gctx.New()
rule = `regex:\d{6,}|\D{6,}|max-length:16`
)
if err := g.Validator().Rules(rule).Data(`123456`).Run(ctx); err != nil {
fmt.Println(err)
}
if err := g.Validator().Rules(rule).Data(`abcde6`).Run(ctx); err != nil {
fmt.Println(err)
}
}执行后,终端输出:
The value `abcde6` must be in regex of: \d{6,}|\D{6,}