# validate
**Repository Path**: aivi/validate
## Basic Information
- **Project Name**: validate
- **Description**: 这是一个go语言验证库,主要验证用户提交的数据
- **Primary Language**: Unknown
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2025-12-22
- **Last Updated**: 2025-12-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
Go通用的数据验证与过滤库,使用简单,内置大部分常用验证器、过滤器,支持自定义消息、字段翻译。
- 简单方便,支持前置验证检查, 支持添加自定义验证器
- 大多数过滤器和验证器都有别名方便使用
- 可以在任何框架中使用 `validate`,例如 Gin、Echo、Chi 等
- 支持直接使用规则来验证值 例如: `(new Validate()).Check([Value{"name", "soudom"}])`
- 完善的单元测试,测试覆盖率 **> 90%**
### 单独使用实例方法配置验证
该实例调用3个方法:
- `Lang()` 甚至错误消息默认的语言,支持Lang.CN/Lang.EN
- `Rule(r map[string]string{})` 设置验证规则
- `SetRule(name, rule string)` 设置单个验证规则
- `Message(m map[string]string)` 可以自定义验证器错误消息
- `SetMessage(cases ...string) ` 设置多个验证错误消息
- `Scene(name string) ` 该方法只支持自定义结构体嵌入Validate结构体下使用
- `Check(val []Value, group ...string)` 验证结果是否符合预期,第二个参数只支持自定义结构体嵌入Validate结构体下使用
**代码示例**:
## 验证`Map`数据
```go
package main
import "fmt"
import "gitee.com/aivi/validate"
import "validate/i18n"
func main() {
// 设置默认语言,内置默认为CN,该语句作为演示使用,实际情况下不用写
i18n.Set(i18n.CN)
// 要验证的数据
m := []validate.Value{
{"name", "inhere"},
{"age", 100},
}
v := validate.NewValidate()
// 设置验证规则以及错误提示信息
res := v.Rule(map[string]string{"name": "require|length:2,14"}).Message(map[string]string{"name.require": "name不能为空", "name.length": "name的值在2-14个字符之间"}).Check(m)
// 单个验证规则设置
// v.SetRule("nickName", "require|length:2,16|chs")
// v.SetMessage("nickName.require", "昵称是必须项", "nickName.length", "昵称长度为2-16个字符", "nickName.chs", "昵称只能为汉字")
// res := v.Check(m)
if res { // validate ok
// do something ...
} else {
fmt.Println(v.Errors) // all error messages
fmt.Println(v.Errors.One()) // returns a random error message text
}
}
```
## 内置验证器
几大类别:
- (为空)必填验证
- 类型验证
- 大小、长度验证
- 字段值比较验证
- 文件验证
- 日期验证
- 字符串检查验证
- 其他验证
验证器 | 描述信息
------------|-----------------------------------------------
`required` | 字段为必填项,值不能为空
`int` | 检查值是 `int` 类型
`bool` | 检查值是布尔字符串("true", "false").
`float` | 检查值是float32/float64,是其中之一则验证通过.
`number` | 检查值是否为纯数字格式.
`array` | 检查值是否为数组
`accepted` | 验证某个字段是否为 yes, on, 或是 1。这在确认"服务条款"是否同意时很有用
`cntrl` | 验证某个字段是否为换行,缩进,空格
`xdigit` | 验证某个字段是否是十六进制
`color` | 验证某个字段是否是十六进制颜色值,比如:#ffcc22
`url` | 验证值是否为url类型,包括但不限于是(https/http/ws/wss/ftp/tcp/udp)://ip(或者域名):端口
`email` | 验证是否为email格式
`mobile` | 验证是否为手机号
`date` | 验证是否为日期格式,格式为:yyyy-mm-dd,yyyy/mm/dd,mm/dd/yyyy
`datetime` | 验证是否为日期时间格式,日期部分为上一部分的date格式,时间格式为:hh:mm,hh:mm:ss,yymmdd
`time` | 验证是否为时间格式,格式为:hh:mm,hh:mm:ss,yymmdd
`zip` | 验证是否为邮政编码,长度为6为数字
`ip` | 验证是否为ip格式,包括ipv4, ipv6
`mac` | 验证是否为mac地址
`idcard` | 验证是否为身份证号码
`chs` | 验证是否为纯汉字,不包括标点符号
`chsAlpha` | 验证是否为汉字,字母,不包括标点符号
`chsAlphaNum` | 验证是否为汉字,字母,数字,不包括标点符号
`chsDash` | 验证是否为汉字,字母,数字,_,-,不包括标点符号
`alpha` | 验证是否为字母
`lower` | 验证是否为小写字母
`upper` | 验证是否为大写字母
`alphaNum` | 验证是否为字母,数字
`dash` | 验证是否为字母,数字,_,-
`en` | 验证是否为英文,包括但不限于英文大小写,数字,英文标点符号,只要符合要求的80%以上就表示是英文
`cn` | 验证是否为中文,包括但不限于中文,数字,标点符号,只要符合要求的80%以上就表示是中文
`length:` | 验证其长度范围,比如: length:2,16,长度是否是2-16个字符,length:15,长度最多为15个字符
`max=` | 验证值最多是多少,比如: max=15,值最大为15
`min=` | 验证值最小是多少,比如: max=5,值最小为5
`in:` | 验证值是否在此列表中,比如: in:one,two,three,four,值只能是这四个之一
`notin:` | 验证值不在此列表中,比如: notin:one,two,three,four,值不能是这四个值
`between` | 验证值是否在此区间内,比如: between:1,15,值是否是大于等于1且小于等于15
`notBetween` | 验证值是否不在此区间内,比如: notBetween:1,15,值是否小于1或者大于15
`prefix=` | 验证值的前缀,比如: prefix=more,值必须是more开头
`suffix=` | 验证值的后缀,比如: suffix=.com,值必须是.com结尾
`eq=` | 验证值是否和指定的字段的值相等,比如: eq=password,值必须和password字段的值相等
`file:` | 验证是否是文件
`image:` | 验证是否是图片,格式为:image:640,320,auto,10,2或者image:9,16,rate,10,2,参数分别是宽,高,类型,允许的图片大小,误差,其中类型有两种,一种是auto,表示具体的宽高,另一种是rate,表示宽高比,比如16:9。这里的误差是指图片的宽高比与目标图片的宽高比,这两者的相差的绝对值最多为多少。
`fileExt:` | 验证值是否是允许的扩展名,比如:fileExt:.png,.jpg,.jpeg,.gif,.webp
`fileMime:` | 验证值是否是允许的类型,比如:fileMime:image/jpeg,image/png,application/pdf
`fileSize:` | 验证值是否超过允许的文件大小,单位是MB,比如:10,表示最大允许10MB