# 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