[!NOTE]

  • 项目验证规则文件在app/request目录下
  • 使用的gin自带的go-playground/validator包,支持汉化,同时为了便捷实用我们做了改造,不需要再model层结构体加验证的tag
  • 支持结构体、map、单个变量验证
  • 介绍表单验证的基本用法

1、在request定义规则

package request

var (
    AddVerify = Rules{}
    UpVerify  = Rules{"ID": "required,numeric,min=1"}
    DelVerify = Rules{"ID": "required,numeric,min=1"}
)

2、在控制器验证

var rule models.SysRule
c.ShouldBindUri(&rule)
if err := request.Verify(rule, request.DelVerify); err != nil {
    tool.JSONP(c, 400, err.Error(), nil)
    return
}

3、可用验证规则

[!NOTE] 范围约束

len:等于参数值,例如len=10;
max:小于等于参数值,例如max=10;
min:大于等于参数值,例如min=10;
eq:等于参数值,注意与len不同。对于字符串,eq约束字符串本身的值,而len约束字符串长度。例如eq=10;
ne:不等于参数值,例如ne=10;
gt:大于参数值,例如gt=10;
gte:大于等于参数值,例如gte=10;
lt:小于参数值,例如lt=10;
lte:小于等于参数值,例如lte=10;
oneof:只能是列举出的值其中一个,这些值必须是数值或字符串,以空格分隔,如果字符串中有空格,将字符串用单引号包围,例如oneof=red green。

[!NOTE] 跨字段约束 这个在我们的验证器中无法使用,只能单独使用

if err := request.VerifyValue(user.Password, user.ConfirmPassword, "eqfield"); err != nil {
        tool.JSONP(c, 400, "确认密码和新密码不一致", nil)
        return
}
eqfield:同一结构体字段相等Field 例:validate:"eqfield=Field2"
nefield:同一结构体字段不相等Field 例:validate:"nefield=Field2"
gtfield:大于同一结构体字段Field 例:validate:"gtfield=Field2"
gtefield:大于等于同一结构体字段Field 例:validate:"gtefield=Field2"
ltfield:小于同一结构体字段Field 例:validate:"ltfield=Field2"
ltefield:小于等于同一结构体字段Field 例:validate:"ltefield=Field2"
eqcsfield:跨不同结构体字段相等Struct1.Field 例:validate:"eqcsfield=Struct2.Field2"
necsfield:跨不同结构体字段不相等Struct1.Field 例:validate:"necsfield=Struct2.Field2"
gtcsfield:大于跨不同结构体字段Struct1.Field 例:validate:"gtcsfield=Struct2.Field2"
gtecsfield:大于等于跨不同结构体字段Struct1.Field 例:validate:"gtecsfield=Struct2.Field2"
ltcsfield:小于跨不同结构体字段Struct1.Field 例:validate:"ltcsfield=Struct2.Field2"
ltecsfield:小于等于跨不同结构体字段Struct1.Field 例:validate:"ltecsfield=Struct2.Field2"

[!NOTE] 字符串约束

contains=:包含参数子串,例如contains=email;
containsany:包含参数中任意的 UNICODE 字符,例如containsany=abcd;
containsrune:包含参数表示的 rune 字符,例如containsrune=☻;
excludes:不包含参数子串,例如excludes=email;
excludesall:不包含参数中任意的 UNICODE 字符,例如excludesall=abcd;
excludesrune:不包含参数表示的 rune 字符,excludesrune=☻;
startswith:以参数子串为前缀,例如startswith=hello;
endswith:以参数子串为后缀,例如endswith=bye。

[!NOTE] 特殊约束

-:跳过该字段,不检验;
|:使用多个约束,只需要满足其中一个,例 rgb|rgba;
required:字段必须设置,不能为默认值;
omitempty:如果字段未设置,则忽略它。
ip:字符串值是否包含有效的IP地址 例 Field validate:"ip"
ipv4:字符串值是否包含有效的ipv4地址 例 Field validate:"ipv4"
datetime:字符串值是否包含有效的日期 例 Field validate:"datetime"

[!NOTE] 自定义约束

建议写在request/zh.go,如果需要自定义请参考该文件

checkMobile:校验手机号
checkPassword:校验密码
powered by Gitbook该文件最后修改时间: 2021-12-02 15:44:38

results matching ""

    No results matching ""