Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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

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

Code Block
languagego
package main

import (
	"fmt"
	"github.com/gogf/gf/v2/frame/g"
	"

单数据校验 - Check

接口文档:https://godoc.org/
github.com/gogf/gf/
util/gvalid
v2/os/gctx"
)

func 
Check
main(
value
) 
interface
{
}, rules string, msgs interface{}, params ...interface{}) *Error

单数据校验比较简单,我们来看几个示例。

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

rule :
 	
	var (
		ctx  = gctx.New()
		rule = "length:6,16"
	)

	if 
e
err := 
gvalid.Check
g.Validator().Rules(rule).Data("123456"
, rule, nil
).Run(ctx); err 
e
!= nil {
		fmt.Println(
e
err.String())
	}
	if 
e
err := 
gvalid.Check
g.Validator().Rules(rule).Data("12345"
, rule, nil
).Run(ctx); 
e
err != nil {
		fmt.Println(
e
err.String())
	} 
}

执行后,终端输出:

Code Block
languagexml
The value `12345` length must be between 6 and 16

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

Code Block
languagego
package main

import (
	"github.com/gogf/gf/v2/
输出: 字段长度为6到16个字符

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

rule :
frame/g"
	"github.com/gogf/gf/v2/os/gctx"
)

func main() {
	var (
		ctx      = gctx.New()
		rule     = "integer|between:6,16"
msgs
		messages 
:
= "请输入一个整数|参数大小不对啊老铁"
		value    = 5.66
	)

	if 
e
err := 
gvalid
g.
Check
Validator(
5.66, rule, msgs
).Rules(rule).Messages(messages).Data(value).Run(ctx); 
e
err != nil {
fmt.Println(e
		g.Dump(err.Map())
	}
// 输出: map[integer:请输入一个整数 between:参数大小不对啊老铁]
}

执行后,终端输出:

Code Block
languagexml
{
    "integer": "请输入一个整数",
    "between": "参数大小不对啊老铁",
}

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

rule :
Code Block
languagego
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    = "
msgs :
goframe.org"
		messages = map[string]string{
			"url"
:       
:
 "请输入正确的URL地址",
			"min-length"
: "地址长度至少为
:min位" } if e
{min}位",
		}
	)
	if err := 
gvalid.Check("https://goframeorg", rule, msgs); e
g.Validator().Rules(rule).Messages(messages).Data(value).Run(ctx); err != nil {
fmt.Println(e
		g.Dump(err.Map())
	}
// 输出: map[url:请输入正确的URL地址]
}

执行后,终端输出:

Code Block
languagexml
{
    "url": "请输入正确的URL地址",
}

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

Code Block
languagego
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 

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

// 参数长度至少为6个数字或者6个字母,但是总长度不能超过16个字符 rule :
= `regex:\d{6,}|\D{6,}|max-length:16`
	)

	if 
e
err := 
gvalid.Check("123456", rule, nil
g.Validator().Rules(rule).Data(`123456`).Run(ctx); err 
e
!= nil {
		fmt.Println(
e.Map()
err)
	}

	if 
e
err := 
gvalid.Check("abcde6", rule, nil
g.Validator().Rules(rule).Data(`abcde6`).Run(ctx); 
e
err != nil {
		fmt.Println(
e.Map()
err)
} // 输出: map[regex:字段值不合法]
	}
}

执行后,终端输出:

Code Block
languagexml
The value `abcde6` must be in regex of: \d{6,}|\D{6,}



Panel
titleContent Menu

Table of Contents