Categorygithub.com/lerity-yao/param-validator
repositorypackage
0.0.2
Repository: https://github.com/lerity-yao/param-validator.git
Documentation: pkg.go.dev

# README

param-validator

go-zero httpx的validator插件

param-validator 集成了 github.com/go-playground/validator/v10,可以使用其所有的校验方法

同时 param-validator 内置了一部分自定义校验方法

注意事项

httpx会优先go-zero自带的校验。请注意,举个简单的例子

type (
	demo {
        Name string `form:"name,optional" validate:"xPhone"` // 姓名
    }
)

这会先通过 httpx自带校验 optional 再通过param-validator的xPhone校验,看起来是没问题的

type (
	demo {
        Name string `form:"name" validate:"omitempty,xPhone"` // 姓名
    }
)

这种写法代表在 go-zero自带校验中,是不允许为空的,但是在param-validator中是允许为空,值不为空的时候,进行xPhone校验, 会有冲突。

建议 go-zero 中都写上 optional

配置

type Conf struct {
	ZhTrans bool `json:"zhTrans,optional,default=true"` // 是否开启中文, 默认中文
}

内置自定义校验

xPhone

校验手机号

规则位1开头,11位纯数字

type (
	demo {
        Name string `form:"name,optional" validate:"xPhone"` // 姓名
    }
)

返回错误为

{0}必须为手机号,1开头,长度为11位

{0}为参数名称

xPassword

校验密码

长度自定义,使用方法为 validate:"xPassword=8-15" 代表 字符串长度为 8到15位。左右都是闭区间

为密码校验规则, 校验其长度位,需由字母(同时要大小和写)、数字、特殊字符串三种组成,不能使用空格、中文

type (
	demo {
        Name string `form:"name,optional" validate:"xPassword=8-15"` // 姓名
    }
)

返回错误为

{0}长度{1},需由字母(区分大小写)、数字、特殊字符串三种组成,不能使用空格、中文

{0}为参数名称

{1}为param即8-15

xStr

首尾不能有空格的字符串校验

长度自定义,使用方法为 validate:"xStr=1-300" 代表字符串长度为 1-300位,左右都为闭区间

首尾不能有空格,中间可以有空格

允许中文,特殊字符串,英文,数字

type (
	demo {
        Name string `form:"name,optional" validate:"xStr=8-15"` // 姓名
    }
)

返回错误为

{0}长度{1},首尾不能有空格

{0}为参数名称

{1}为param即8-15

xStrWithoutZh

首尾不能有空格,不能包含中文的字符串校验

为字符串校验方法,使用方法为 validate:"xStrWithoutZh=1-300" 代表字符串长度为 1-300位,左右都为闭区间

长度自定义

首尾不能有空格,中间可以有空格

不能包含中文

允许特殊字符串,英文,数字

type (
	demo {
        Name string `form:"name,optional" validate:"xStrWithoutZh=8-15"` // 姓名
    }
)

返回错误为

{0}长度{1},首尾不能有空格,不能包含中文

{0}为参数名称

{1}为param即8-15

xStrWithoutZhAndSpec

首尾不能有空格,不能包含中文,不能包含特殊字符串的字符串校验

使用方法为 validate:"xStrWithoutZhAndSpec=1-300" 代表字符串长度为 1-300位,左右都为闭区间

长度自定义

首尾不能有空格,中间可以有空格

不能包含中文

不能包含特殊字符 !@#$%^&*()_+-=[]{};':"\|,.<>/?等

允许字母和数字

type (
	demo {
        Name string `form:"name,optional" validate:"xStrWithoutZhAndSpec=8-15"` // 姓名
    }
)

返回错误为

{0}长度{1},首尾不能有空格,不能包含中文和特殊字符串

{0}为参数名称

{1}为param即8-15

xStrWithoutSpec

首尾不能有空格,不能包含特殊字符串的字符串校验

使用方法为 validate:"xStrWithoutSpec=1-300" 代表字符串长度为 1-300位,左右都为闭区间

长度自定义

首尾不能有空格,中间可以有空格

不能包含特殊字符 !@#$%^&*()_+-=[]{};':"\|,.<>/?等

可以包含其他字符(如字母、数字、空格、中文等)

type (
	demo {
        Name string `form:"name,optional" validate:"xStrWithoutSpec=8-15"` // 姓名
    }
)

返回错误为

{0}长度{1},首尾不能有空格,不能包含特殊字符串

{0}为参数名称

{1}为param即8-15

xStrWithoutSpec

不能有空格,不能包含特殊字符串的字符串校验

使用方法为 validate:"xStrWithoutSpecAndSpace=1-300" 代表字符串长度为 1-300位,左右都为闭区间 长度自定义 不能有空格 不能包含特殊字符 !@#$%^&*()_+-=[]{};':"\|,.<>/?等 可以包含其他字符(如字母、数字、中文等)。

type (
	demo {
        Name string `form:"name,optional" validate:"xStrWithoutSpec=8-15"` // 姓名
    }
)

返回错误为

{0}长度{1},不能有空格,不能包含特殊字符串

{0}为参数名称

{1}为param即8-15

注册自定义校验方式

param-validator 暴漏了 RegisterValidation 和 RegisterTranslation 来注册自定义校验方法和错误返回消息。

import (
    params_validator "github.com/lerity-yao/param-validator"
    regexp "github.com/dlclark/regexp2"
    "github.com/go-playground/validator/v10"
)

// 自定义校验方法
func xPhone(fl validator.FieldLevel) bool {
	re := regexp.MustCompile(`^1\d{10}$`, regexp.None)
	ok, err := re.MatchString(fl.Field().String())
	if err != nil {
		return false
	}
	return ok
}

func x() {
    // 注册自定义校验方法
    vd := params_validator.MustNewHttpxParseValidator(params_validator.Conf{ZhTrans: true})
    vd.RegisterValidation("xPhone", xPhone))
    vd.RegisterTranslation("xPhone", "{0}必须为手机号,1开头,长度为11位", false)
    httpx.SetValidator(vd)
}