validator

package module
v1.0.6-0...-3ae951f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 27, 2023 License: MIT Imports: 19 Imported by: 0

README

go版本的validator通用验证器

修改日志(change log)

改版前v1.0.1

改版后v1.0.4

树结构v1.0.5

用法(usage)

注意:

1. 规则a.b代表a对象里面key为b的数据,a.*.b代表a数组中对象里面key为b的数据(全局通用)

2. 验证参数存在 param.Field("fieldName") 时,fieldName 必须存在验证规则中

引入

import "github.com/goodluckxu-go/validator"

添加全局验证器

validator.RegisterMethod("test", func(d *validator.Data, args ...interface{}) error {
    return nil
})

调用方法

// data只能有map[string]interface{},[]interface{},interface{}三种类型时字符串类型的数字可转化
var data interface{}
var dataIn int
valid := validator.New().
	SetRequest(req). // *http.Request,不设置则验证传入data数据的值
	SetData(&data).
	SetRules([]validator.Rule{
		{Field:""}, //空字符串代表验证最外层(全部) 
		{Field: "list.*.b.*.a", Methods: validator.Method.List(
			validator.Method.SetMethod("required"), // 常规验证 
			validator.Method.SetMethod("test"), // 添加的全局验证 
			//args表示外部传入的任意参数 
			validator.Method.SetFun(func(d *validator.Data, args ...interface{}) error {
				a, _ := args[0].(*int)
				*a = 10
				return nil
			}, &dataIn), // 自定义验证 
		), Notes: "测试"},
	}). // 不传规则则是赋值
	SetMessages([]validator.Message{ // 只会生效最后一条 
		{"list.*.b.*.a.required", "必填"}, // 其中*代表list1列表的所有的b数组中所有的a的required规则错误注释被替换 
		{"list.*.b.0.a.required", "必填1"},// 其中*代表list1列表的所有的b数组中第0位的a的required规则错误注释被替换 
	}).
	Valid()

验证数据*Data说明

数据
{
    "c": "111",
    "list": [
        {
            "a": {
                "a": 1,
                "b": 2,
                "c": 3
            },
            "b": [
                {
                    "a": 5,
                    "b": 6
                },
                {
                    "a": 5,
                    "b": 7
                },
                {
                    "a": 5,
                    "b": 8
                }
            ]
        },
        {
            "a": {
                "a": 1,
                "b": 2,
                "c": 3
            },
            "b": [
                {
                    "a": 5,
                    "b": 16
                },
                {
                    "a": 5,
                    "b": 17
                },
                {
                    "a": 5,
                    "b": 18
                }
            ]
        }
    ]
}
方法
GetAllData() interface{}

获取所有数据

GetData(path string) []DataOne

根据key获取数据

例如:传 list.*.b. *.b ,获得

[
    {"Path":"list.0.b.0.b","Data":6},
    {"Path":"list.0.b.1.b","Data":7},
    {"Path":"list.0.b.2.b","Data":8},
    {"Path":"list.1.b.0.b","Data":16},
    {"Path":"list.1.b.1.b","Data":17},
    {"Path":"list.1.b.2.b","Data":18}
]
GetCommonData(path string) interface{}

获取两个值最近的公共数据

例如:当期验证数据list.0.a.a,传入list.*.a.b,获取数据则为list.0.a对象

GetLevelData(path string) []DataOne

获取和验证同一层级的数据集合

例如:当期验证数据list.0.a.a,传入list.*.a.b,获取数据则为list.0.a.b数据切片

GetValidData() interface{}

设置验证数据

GetNotes() string

获取注释

GetNotesByPath(path string) string

通过path路径获取注释

func (d *Data) JumpValid() error

跳过当前字段的验证

func (d *Data) JumpChild() error {

跳过子集验证

返回错误信息(callback)

valid.Error

语言包(language)

validator.SetLangAddr("./zh_cn.json")

语言包json格式参照lang/zh_cn.json文件

所有常规验证规则(rules)

通用规则

valid_condition | required | nullable | in | not_in | unique | email | phone | regexp | not_regexp

类型验证

array | map | string | number | integer | bool | date | file

比较验证 (字段,时间,数字)

eq | gt | gte | lt | lte

长度验证 (字符串,数组,文件大小)

len | min | max

文件验证

suffix | mime

规则注释(rule notes)

valid_condition规则

args参数说明:

1. &&是并且,||是或者

2. &&和||之间的数据为验证公式,公式结果为布尔型

3. 公式目前占1-3个字符

4. 公式可以直接为true或false

5. 验证公式符号有>,>=,<,<=,=,!=,in,not。例如:>,3表示验证数据大于3;3,>,2表示比较3和2的值;param.Field("a"),>,2表示字段a的值大于2

6. in是在数组里面,not是不再数组里面,其他公式符号都是简单类型数组(string,int等)

7. condition.Brackets表示括号,里面值和args一样规则

8. 所有公式满足为true则验证,否在跳过验证

validator.Method.SetMethod("valid_condition", "=", 1, "&&", "<", 10, "&&", param.Field("list.*.a.a"), "=", 12, "&&", condition.Brackets(">", 2)),
required规则

验证是否必填。null,字符串为"",数字类型为0,bool类型为false,数组为[],map为{}都不通过 参数为string,number,bool,array,map,代表string为空不验证,number为0不验证,bool为false不验证,array为[]不验证,map为{}不验证

validator.Method.SetMethod("required", "string")
nullable规则

数据为空则不验证后面的规则,字符串为"",数字类型为0,bool类型为false,数组为[],map为{}都不验证后的单规则

validator.Method.SetMethod("nullable")
in规则

验证是否在数组里面,参数是slice或array类型

validator.Method.SetMethod("in", []int{1,2,3})
not_in规则

验证是否不在数组里面,参数是slice或array类型

validator.Method.SetMethod("not_in", []int{1,2,3})
unique规则

验证数组内的值唯一

validator.Method.SetMethod("unique")
email规则

验证是否是邮箱

validator.Method.SetMethod("email")
phone规则

验证是否是手机号

validator.Method.SetMethod("phone")
regexp规则

验证数据在正则表达式中

validator.Method.SetMethod("regexp", `^\d*$`)
not_regexp规则

验证数据不在正则表达式中

validator.Method.SetMethod("not_regexp", `^\d*$`)
array规则

验证是否是数组

validator.Method.SetMethod("array")
map规则

验证是否是对象

validator.Method.SetMethod("map")
string规则

验证是否是字符串

validator.Method.SetMethod("string")
number规则

验证是否是数字。可验证数字和字符串的数字,如果接受数据为map[string]interface{},[]interface{},interface{}验证后会转换成float64

validator.Method.SetMethod("number")
integer规则

验证是否是整数。可验证数字和字符串的数字,如果接受数据为map[string]interface{},[]interface{},interface{}验证后会转换成int64

validator.Method.SetMethod("integer")
bool规则

验证是否是布尔类型。可验证整数和布尔类型

validator.Method.SetMethod("bool")
date规则

验证是否是日期格式 args参数Y-m-d H:i:s类型,Y年,m月,d日,H时,i分,s秒

validator.Method.SetMethod("date")
file规则

验证是否是文件

validator.Method.SetMethod("file")
eq规则

验证两个字段是否相同,参数可以是param.Field("test")字段值

validator.Method.SetMethod("eq",5)
gt规则

验证是否大于某个数。可验证数字,字符串的数字或日期,参数可以是param.Field("test"),time.Time字段值

validator.Method.SetMethod("gt",5)
gte规则

验证是否大于等于某个数。可验证数字和字符串的数字或日期,参数可以是param.Field("test"),time.Time字段值

validator.Method.SetMethod("gte",5)
lt规则

验证是否小于某个数。可验证数字和字符串的数字或日期,参数可以是param.Field("test"),time.Time字段值

validator.Method.SetMethod("lt",5)
lte规则

验证是否小于等于某个数。可验证数字和字符串的数字或日期,参数可以是param.Field("test"),time.Time字段值

validator.Method.SetMethod("lte",5)
len规则

验证是长度等于某个数。可获取字符串和数组长度或者文件大小(单位: kb)

validator.Method.SetMethod("len", 5)
min规则

验证是长度大于等于某个数。可获取字符串和数组长度或者文件大小(单位: kb)

validator.Method.SetMethod("min", 5)
max规则

验证是长度小于等于某个数。可获取字符串和数组长度或者文件大小(单位: kb)

validator.Method.SetMethod("max", 5)
suffix规则

验证文件后缀类型,可为多个

validator.Method.SetMethod("suffix", "jpg","png")
mime规则

验证文件协议类型,可为多个

validator.Method.SetMethod("mime", "image/jpeg","image/png")

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	Method method // 规则方法

)

Functions

func RegisterMethod

func RegisterMethod(key string, fn func(d *Data, args ...interface{}) error)

RegisterMethod 设置全局验证规则方法

func SetLangAddr

func SetLangAddr(langAddr string)

SetLangAddr 设置语言包地址

Types

type Data

type Data struct {
	// contains filtered or unexported fields
}

Data 数据

func (*Data) GetAllData

func (d *Data) GetAllData() interface{}

GetAllData 获取所有数据

func (*Data) GetCommonData

func (d *Data) GetCommonData(path string) interface{}

GetCommonData 获取数组层级最近的一次相同数据(同一数组中)

func (*Data) GetData

func (d *Data) GetData(path string) (rs []DataOne)

GetData 获取数据且合并成数组

func (*Data) GetLevelData

func (d *Data) GetLevelData(path string) (rs []DataOne)

GetLevelData 获取层级数据,遇到*合并数组

func (*Data) GetNotes

func (d *Data) GetNotes() string

GetNotes 获取注释

func (*Data) GetNotesByPath

func (d *Data) GetNotesByPath(path string) string

GetNotesByPath 根据path获取注释

func (*Data) GetValidData

func (d *Data) GetValidData() interface{}

GetValidData 获取验证数据

func (*Data) JumpChild

func (d *Data) JumpChild() error

JumpChild 跳过子集验证

func (*Data) JumpValid

func (d *Data) JumpValid() error

JumpValid 跳过当前字段验证

type DataOne

type DataOne struct {
	Path string
	Data interface{}
}

DataOne 单条数据

type Message

type Message [2]string

Message 消息

type Rule

type Rule struct {
	Field   string
	Methods []methodData
	Notes   string
	// contains filtered or unexported fields
}

Rule 单个规则

type Valid

type Valid struct {
	Error error
	// contains filtered or unexported fields
}

func New

func New() *Valid

New 实例化验证

func (*Valid) SetData

func (v *Valid) SetData(data interface{}) (va *Valid)

SetData 设置数据

func (*Valid) SetMessages

func (v *Valid) SetMessages(messages []Message) (va *Valid)

SetMessages 设置消息

func (*Valid) SetRequest

func (v *Valid) SetRequest(req *http.Request) (va *Valid)

SetRequest 设置request

func (*Valid) SetRules

func (v *Valid) SetRules(rules []Rule) (va *Valid)

SetRules 设置规则

func (*Valid) Valid

func (v *Valid) Valid() (va *Valid)

Valid 验证数据

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL