包验证器
包验证器实现了基于标签的结构和单个字段的值验证。
它有以下独特的功能。
- 通过使用验证标签或自定义验证器进行跨字段和跨结构验证。
- 切片、数组和地图潜入,允许对一个多维字段的任何或所有层次进行验证。
- 能够潜入地图的键和值中进行验证。
- 通过在验证前确定它的基本类型来处理类型接口。
- 处理自定义字段类型,如sql驱动Valuer见Valuer
- 别名验证标签,允许将几个验证映射到一个标签上,以方便定义结构上的验证。
- 提取自定义定义的字段名,例如,可以指定在验证时提取JSON名称,并在产生的FieldError中提供该名称。
- 可定制的i18n感知错误信息。
- ginweb框架的默认验证器;在gin中从v8升级到v9请看这里
安装
使用go get。
go get github.com/go-playground/validator/v10
然后将验证器包导入你自己的代码中。
import "github.com/go-playground/validator/v10"
错误返回值
验证函数返回类型错误
它们返回类型错误是为了避免下面讨论的问题,即err总是 != nil。
Validator只对错误的验证输入返回InvalidValidationError,对类型错误返回nil或ValidationErrors;所以,在你的代码中,你需要做的是检查返回的错误是否为nil,如果不是,则检查错误是否为InvalidValidationError(如果需要,大多数情况下不是),像这样把它类型化为ValidationErrors。
err
使用方法和文档
请参阅pkg.go.dev/github.com/…,了解详细的使用说明。
例子。
烘烤的验证方法
字段。
| 标签 | 描述 |
|---|---|
| eqcsfield | 字段等同于另一个字段(相对)。 |
| 符号 | 字段等同于另一个字段 |
| 字段包含 | 未记录在doc.go中 |
| 字段不包括 | 未记录在doc.go中 |
| gtcsfield | 大于另一相对字段的字段 |
| gtecsfield | 大于或等于另一个相对字段的字段 |
| gtefield | 大于或等于另一个字段的字段 |
| 场地 | 大于另一个字段的字段 |
| ltcsfield | 小于另一个相对字段 |
| 小于或等于另一个相对字段 | 小于或等于另一个相对字段 |
| ltefield | 小于或等于另一个字段 |
| 梯田 | 小于另一个字段 |
| 小于或等于另一字段 | 字段不等于另一字段(相对) |
| 场地 | 字段不等于另一字段 |
网络。
| 标签 | 描述 |
|---|---|
| cidr | 无类域间路由CIDR |
| cidrv4 | 无类域间路由CIDRv4 |
| cidrv6 | 无类域间路由CIDRv6 |
| 数据 | 数据URL |
| fqdn | 全限定域名(FQDN)。 |
| 主机名 | 主机名RFC 952 |
| 主机名_端口 | 主机端口 |
| 主机名_rfc1123 | 主机名RFC1123 |
| ip | 互联网协议地址 IP |
| ip4_addr | 互联网协议地址IPv4 |
| ip6_addr | 互联网协议地址IPv6 |
| ip_addr | 互联网协议地址IP |
| ipv4 | 互联网协议地址IPv4 |
| ipv6 | 互联网协议地址IPv6 |
| mac | 媒体访问控制地址MAC |
| tcp4_addr | 传输控制协议地址 TCPv4 |
| tcp6_addr | 传输控制协议地址 TCPv6 |
| tcp_addr | 传输控制协议地址 TCP |
| udp4_addr | 用户数据报协议地址UDPv4 |
| udp6_addr | 用户数据报协议地址 UDPv6 |
| udp_addr | 用户数据报协议地址UDP |
| unix_addr | Unix域套接字端点地址 |
| uri | URI字符串 |
| 网址 | URL字符串 |
| url_encoded | 编码的URL |
| urn_rfc2141 | Urn RFC 2141字符串 |
字符串。
| 标签 | 描述 |
|---|---|
| 阿尔法 | 仅限阿尔法 |
| alphanum | 字母数字 |
| 字母数字Unicode | 字母数字Unicode |
| αunicode | 阿尔法统一码 |
| ascii | ASCII |
| boolean | 布尔型 |
| 包含 | 包含 |
| 包含任何 | 包含任何 |
| 包含符文 | 包含符文 |
| 结束不与 | 不包含的结束 |
| 结束与 | 结束与 |
| 不包括 | 不包括 |
| 不包括所有 | 不包括所有 |
| 不包括鲁恩 | 排除符文 |
| 小写 | 小写字母 |
| multibyte | 多字节字符 |
| 数字 | 未记录在doc.go中 |
| 数字 | 数值 |
| printascii | 可打印的ASCII码 |
| startsnotwith | 不以任何方式开始 |
| 开始与 | 开始于 |
| 大写字母 | 大写字母 |
格式。
| 标签 | 描述 |
|---|---|
| base64 | Base64字符串 |
| 编码 | Base64URL字符串 |
| bic | 商业识别码(ISO 9362)。 |
| bcp47_language_tag | 语言标签(BCP47)。 |
| btc_addr | 比特币地址 |
| btc_addr_bech32 | 比特币Bech32地址 (segwit) |
| credit_card | 信用卡号码 |
| 日期时间 | 日期时间 |
| e164 | e164格式的电话号码 |
| E-mail字符串 | |
| eth_addr | 以太坊地址 |
| 十六进制 | 十六进制字符串 |
| 十六色 | 十六进制颜色字符串 |
| hsl | HSL字符串 |
| 橙色 | HSLA字符串 |
| 语气词 | HTML标签 |
| html_encoded | 编码的HTML |
| 国际标准书号(isbn | 国际标准书号 |
| isbn10 | 国际标准书号10 |
| isbn13 | 国际标准书号13 |
| iso3166_1_alpha2 | 双字母国家代码(ISO 3166-1 alpha-2) |
| ISO3166_1_alpha3 | 三个字母的国家代码(ISO 3166-1 alpha-3) |
| iso3166_1_alpha_numeric | 数字型国家代码(ISO 3166-1数字型)。 |
| iso3166_2 | 国家细分代码(ISO 3166-2) |
| iso4217 | 货币代码(ISO 4217) |
| json | JSON |
| jwt | JSON网络令牌(JWT)。 |
| 纬度 | 纬度 |
| 经度 | 经度 |
| postcode_iso3166_alpha2 | 邮政编码 |
| 邮政编码_iso3166_alpha2_field | 邮政编码 |
| rgb | RGB字符串 |
| rgba | RGBA字符串 |
| ssn | 社会安全号码SSN |
| 时区 | 时区 |
| uuid | 通用唯一标识符UUID |
| uuid3 | 通用唯一标识符UUID v3 |
| uuid3_rfc4122 | 通用唯一标识符UUID v3 RFC4122 |
| uuid4 | 通用唯一识别码UUID v4 |
| uuid4_rfc4122 | 通用唯一标识符UUID v4 RFC4122 |
| uuid5 | 通用唯一标识符UUID v5 |
| uuid5_rfc4122 | 通用唯一标识符UUID v5 RFC4122 |
| uuid_rfc4122 | 通用唯一标识符UUID RFC4122 |
| md4 | MD4哈希值 |
| md5 | MD5哈希值 |
| sha256 | SHA256哈希值 |
| 沙哈384 | SHA384哈希值 |
| SHA512 | SHA512哈希值 |
| RIPEMD128 | RIPEMD-128哈希值 |
| RIPEMD128 | RIPEMD-160哈希值 |
| tiger128 | TIGER128 哈希值 |
| tiger160 | TIGER160 哈希值 |
| 老虎192 | TIGER192 哈希 |
| Semver | Semantic Versioning 2.0.0 |
| ulid | 普遍独特的、可按词汇排序的标识符ULID |
比较。
| 标签 | 描述 |
|---|---|
| eq | 等于 |
| gt | 大于 |
| gte | 大于或等于 |
| lt | 小于 |
| lte | 小于或等于 |
| ne | 不等于 |
其他。
| 标签 | 描述 |
|---|---|
| 排放 | 目录 |
| 文件 | 文件路径 |
| isdefault | 是默认的 |
| len | 长度 |
| 最大 | 最大 |
| min | 最小值 |
| 其中 | 其中一个 |
| 所需 | 需要 |
| 必要的_如果 | 必需的,如果 |
| 必需的_无 | 必需的,除非 |
| 需要 | 必须有 |
| 必需包含所有 | 全部为必填 |
| 需要_不需要 | 必需的,没有 |
| 不含所有 | 必需的,没有全部 |
| excluded_if | 不包括,如果 |
| 不包括 | 排除在外,除非 |
| excluded_with | 排除与 |
| excluded_with_all | 全部排除 |
| 除外_不包括 | 不包括在内 |
| 排除在外_不包括所有 | 不包括所有 |
| 唯一的 | 独特的 |
别名。
| 标签 | 描述 | ||||
|---|---|---|---|---|---|
| 是色 | 肤色 | rgb | rgba | hsl | hsla |
| 国家代码 | iso3166_1_alpha2 | iso3166_1_alpha3 | iso3166_1_alpha_numeric |
基准测试
在MacBook Pro(15英寸,2017年)go1.10.2 darwin/amd64版本上运行
goos:
补充性软件
以下是使用这个库的补充软件列表,无论是在验证前还是验证后。
如何贡献
发出拉动请求...
许可证
以MIT许可证发布,更多细节请见代码中的许可证文件。
维护者
这个项目已经发展到足够大的规模,需要一个以上的人去适当地支持社区。如果你有兴趣成为维护者,请联系我github.com/deankarn。