【Validator】字段验证器介绍,及基本使用go案例

Go 语言 Validator 字段验证详解

validator 是 Go 语言中非常流行的一个字段验证库,支持多种数据类型的验证规则,非常适合用于表单校验、API 输入参数校验等场景。

安装 Validator

go get github.com/go-playground/validator/v10

1. 初始化 Validator

在使用 validator 前,需要对验证器进行初始化。

import (  
    "github.com/go-playground/validator/v10"  
    "log"  
)

var validate *validator.Validate  

func init() {  
    validate = validator.New() // 初始化验证器  
    validate.SetTagName("v")   // 设置标签名为 v  
}

通过 SetTagName 方法,可以自定义验证规则标签的名称,默认为 validate。在这里我们将其设置为 v


Valdator字段对应 https://github.com/go-playground/validator?tab=readme-ov-file

常用验证规则

验证标签 说明 示例
required 必填 validate:"required"
email 必须是有效的邮箱 validate:"email"
gte 大于或等于某个值(支持数值/时间) validate:"gte=18"
lte 小于或等于某个值(支持数值/时间) validate:"lte=100"
min 字符串/切片/数组长度或数值 >= 指定值 validate:"min=3"
max 字符串/切片/数组长度或数值 <= 指定值 validate:"max=10"
len 长度必须等于指定值 validate:"len=5"
url 必须是有效的 URL validate:"url"
uuid 必须是有效的 UUID validate:"uuid"
alphanum 必须是字母或数字 validate:"alphanum"
datetime 必须符合时间格式 validate:"datetime=2006-01-02"

2. 单字段验证

验证数据类型

布尔类型

使用 boolean 验证一个值是否为布尔类型:

var b bool
err := validate.Var(b, "boolean")
outRs("boolean", &err)
数字类型
  • 验证整数是否为数字可以是字符串整形,也可以直接是int:
var i = "100"
err := validate.Var(i, "number")
outRs("number", &err)
  • 验证浮点数可以是字符串浮点数,也可以直接是浮点数:
var f = 100.11
err := validate.Var(f, "numeric")
outRs("numeric", &err)

验证字符串

  • 验证字符串是否为字母:
s := "abc"
err := validate.Var(s, "alpha")
outRs("alpha", &err)
  • 验证字符串是否为 Unicode 字符(包括中文):
s := "测试"
err := validate.Var(s, "alphaunicode")
outRs("alphaunicode", &err)
  • 比较两个字段是否相等:
s1 := "abc"
s2 := "abc"
err := validate.VarWithValue(s1, s2, "eqfield")
outRs("eqfield", &err)

3. 切片与 Map 验证

验证切片长度

使用 len 验证切片的长度:

sl := []int{1, 2, 3}
err := validate.Var(sl, "len=3")
outRs("len=3", &err)

验证 Map 长度

类似于切片,可以使用 len 验证 Map 的长度:

mp := map[int]int{1: 1, 2: 2}
err := validate.Var(mp, "len=2")
outRs("len=2", &err)

4. 时间格式验证

可以通过 datetime 验证字符串是否符合指定的时间格式:

timeStr := time.Now().Format("2006-01-02 15:04:05 -0700 MST")
err := validate.Var(timeStr, "datetime=2006-01-02 15:04:05 -0700 MST")
outRs("datetime", &err)

5. 特殊字符验证

在某些场景中,我们需要验证字符串是否包含特定的特殊字符。可以通过 regex(正则表达式)规则实现:

示例代码

以下代码检查字符串是否包含 !@#$%^&*(),.?":{}|<> 中的任意特殊字符:

specialCharStr := "abc!@#"
err := validate.Var(specialCharStr, "regex=.*[!@#$%^&*(),.?\":{}|<>].*")
outRs("special_char", &err)
  • 正则解释
    • .* 表示任意字符。
    • [!@#$%^&*(),.?\":{}|<>] 匹配特殊字符的集合。
    • .* 确保字符串可以在特殊字符前后包含其他任意字符。

注意事项

  • regex 是一种非常强大的验证方式,但需要开发者对正则表达式的语法有一定的了解。
  • 当字符串验证失败时,可以通过返回的 err 错误对象获取更具体的信息。
  • 如果项目需要支持国际化,可能需要引入 validator 的翻译包,例如:
    • github.com/go-playground/validator/v10/translations/zh
    • github.com/go-playground/validator/v10/universal-translator

6. 输出结果辅助函数

为了方便查看验证结果,可以定义一个辅助函数:

func outRs(tag string, err *error) {
    log.Println("---start " + tag + "---")
    log.Println(*err)
    log.Println("---end " + tag + "---")
    *err = nil // 显式清除错误值
}

https://github.com/0voice

你可能感兴趣的:(golang,开发语言,后端)