codecamp

GoFrame 数据校验-单数据校验

我们可以将给定的变量当做一个完整的参数进行校验,即单数据校验。如果变量是​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 16

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

package 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,}


GoFrame 数据校验-校验结果
GoFrame Struct校验-基本使用
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

GoFrame 核心组件

GoFrame 核心组件-数据库ORM

GoFrame 模块列表

GoFrame 模块列表-单元测试

GoFrame 模块列表-功能调试

GoFrame WEB服务开发

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }