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

校验数据长度,使用默认的错误提示

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/gogf/gf/v2/frame/g"
  5. "github.com/gogf/gf/v2/os/gctx"
  6. )
  7. func main() {
  8. var (
  9. ctx = gctx.New()
  10. rule = "length:6,16"
  11. )
  12. if err := g.Validator().Rules(rule).Data("123456").Run(ctx); err != nil {
  13. fmt.Println(err.String())
  14. }
  15. if err := g.Validator().Rules(rule).Data("12345").Run(ctx); err != nil {
  16. fmt.Println(err.String())
  17. }
  18. }

执行后,终端输出:

  1. The value `12345` length must be between 6 and 16

校验数据类型及大小,并且使用自定义的错误提示

  1. package main
  2. import (
  3. "github.com/gogf/gf/v2/frame/g"
  4. "github.com/gogf/gf/v2/os/gctx"
  5. )
  6. func main() {
  7. var (
  8. ctx = gctx.New()
  9. rule = "integer|between:6,16"
  10. messages = "请输入一个整数|参数大小不对啊老铁"
  11. value = 5.66
  12. )
  13. if err := g.Validator().Rules(rule).Messages(messages).Data(value).Run(ctx); err != nil {
  14. g.Dump(err.Map())
  15. }
  16. }

执行后,终端输出:

  1. {
  2. "integer": "请输入一个整数",
  3. "between": "参数大小不对啊老铁",
  4. }

可以看到,多个规则以及多个自定义错误提示之间使用英文 | 号进行分割,注意自定义错误提示的顺序和多规则的顺序一一对应。 messages 参数除了支持 string 类型以外,还支持 map[string]string 类型,请看以下例子:

  1. package main
  2. import (
  3. "github.com/gogf/gf/v2/frame/g"
  4. "github.com/gogf/gf/v2/os/gctx"
  5. )
  6. func main() {
  7. var (
  8. ctx = gctx.New()
  9. rule = "url|min-length:11"
  10. value = "goframe.org"
  11. messages = map[string]string{
  12. "url": "请输入正确的URL地址",
  13. "min-length": "地址长度至少为{min}位",
  14. }
  15. )
  16. if err := g.Validator().Rules(rule).Messages(messages).Data(value).Run(ctx); err != nil {
  17. g.Dump(err.Map())
  18. }
  19. }

执行后,终端输出:

  1. {
  2. "url": "请输入正确的URL地址",
  3. }

使用自定义正则校验数据格式,使用默认错误提示

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/gogf/gf/v2/frame/g"
  5. "github.com/gogf/gf/v2/os/gctx"
  6. )
  7. func main() {
  8. var (
  9. ctx = gctx.New()
  10. rule = `regex:\d{6,}|\D{6,}|max-length:16`
  11. )
  12. if err := g.Validator().Rules(rule).Data(`123456`).Run(ctx); err != nil {
  13. fmt.Println(err)
  14. }
  15. if err := g.Validator().Rules(rule).Data(`abcde6`).Run(ctx); err != nil {
  16. fmt.Println(err)
  17. }
  18. }

执行后,终端输出:

  1. The value `abcde6` must be in regex of: \d{6,}|\D{6,}