go-playground / validator

779 阅读7分钟

包验证器

Join the chat at https://gitter.im/go-playground/validatorProject statusBuild StatusCoverage StatusGo Report CardGoDocLicense

包验证器实现了基于标签的结构和单个字段的值验证。

它有以下独特的功能。

  • 通过使用验证标签或自定义验证器进行跨字段和跨结构验证。
  • 切片、数组和地图潜入,允许对一个多维字段的任何或所有层次进行验证。
  • 能够潜入地图的键和值中进行验证。
  • 通过在验证前确定它的基本类型来处理类型接口。
  • 处理自定义字段类型,如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_addrUnix域套接字端点地址
uriURI字符串
网址URL字符串
url_encoded编码的URL
urn_rfc2141Urn RFC 2141字符串

字符串。

标签描述
阿尔法仅限阿尔法
alphanum字母数字
字母数字Unicode字母数字Unicode
αunicode阿尔法统一码
asciiASCII
boolean布尔型
包含包含
包含任何包含任何
包含符文包含符文
结束不与不包含的结束
结束与结束与
不包括不包括
不包括所有不包括所有
不包括鲁恩排除符文
小写小写字母
multibyte多字节字符
数字未记录在doc.go中
数字数值
printascii可打印的ASCII码
startsnotwith不以任何方式开始
开始与开始于
大写字母大写字母

格式。

标签描述
base64Base64字符串
编码Base64URL字符串
bic商业识别码(ISO 9362)。
bcp47_language_tag语言标签(BCP47)。
btc_addr比特币地址
btc_addr_bech32比特币Bech32地址 (segwit)
credit_card信用卡号码
日期时间日期时间
e164e164格式的电话号码
emailE-mail字符串
eth_addr以太坊地址
十六进制十六进制字符串
十六色十六进制颜色字符串
hslHSL字符串
橙色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)
jsonJSON
jwtJSON网络令牌(JWT)。
纬度纬度
经度经度
postcode_iso3166_alpha2邮政编码
邮政编码_iso3166_alpha2_field邮政编码
rgbRGB字符串
rgbaRGBA字符串
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
md4MD4哈希值
md5MD5哈希值
sha256SHA256哈希值
沙哈384SHA384哈希值
SHA512SHA512哈希值
RIPEMD128RIPEMD-128哈希值
RIPEMD128RIPEMD-160哈希值
tiger128TIGER128 哈希值
tiger160TIGER160 哈希值
老虎192TIGER192 哈希
SemverSemantic Versioning 2.0.0
ulid普遍独特的、可按词汇排序的标识符ULID

比较。

标签描述
eq等于
gt大于
gte大于或等于
lt小于
lte小于或等于
ne不等于

其他。

标签描述
排放目录
文件文件路径
isdefault是默认的
len长度
最大最大
min最小值
其中其中一个
所需需要
必要的_如果必需的,如果
必需的_无必需的,除非
需要必须有
必需包含所有全部为必填
需要_不需要必需的,没有
不含所有必需的,没有全部
excluded_if不包括,如果
不包括排除在外,除非
excluded_with排除与
excluded_with_all全部排除
除外_不包括不包括在内
排除在外_不包括所有不包括所有
唯一的独特的

别名。

标签描述
是色肤色rgbrgbahslhsla
国家代码iso3166_1_alpha2iso3166_1_alpha3iso3166_1_alpha_numeric

基准测试

在MacBook Pro(15英寸,2017年)go1.10.2 darwin/amd64版本上运行
goos: 

补充性软件

以下是使用这个库的补充软件列表,无论是在验证前还是验证后。

  • form- 将url.Values解码为Go值,将Go值编码为url.Values。支持双数组和全地图。
  • mold- 一个通用库,帮助修改或设置数据结构和其他对象中的数据。

如何贡献

发出拉动请求...

许可证

以MIT许可证发布,更多细节请见代码中的许可证文件。

维护者

这个项目已经发展到足够大的规模,需要一个以上的人去适当地支持社区。如果你有兴趣成为维护者,请联系我github.com/deankarn