基于 js 库 validator.js 的字符串验证器和消毒器库
为什么不使用流行的 Go 库,如 Package validator 或 govalidator?虽然这两个库都很出名,但 validatorgo 专注于独立字符串验证,并提供了受 validator.js 启发的广泛的可定制验证器集合,而这两个 Go 库都没有完全实现。
以下是 validatorgo 与 go-playground/validator 和 govalidator 相比的突出之处:
直接字符串验证:go-playground/validator 主要用于使用标签验证结构字段,这非常适合处理 JSON 或基于结构的数据。然而,它并不是为验证单个字符串而设计的,ValidatorGo 可以无缝地验证单个字符串,而不需要结构标签或额外的设置。
性能:go-playground/validator 依赖反射来动态检查结构标签。反射虽然功能强大,但会带来性能开销,尤其是在验证大型或复杂数据结构时。 validatorgo 避免了反射,从而提高了性能,对于需要单字段验证的场景来说,速度更快、效率更高。
我创建了 validatorgo 作为另一个名为 ginvalidator 的 Go 库的依赖项,该库验证 Go Web 应用程序中的 HTTP 请求。受 Express-validator(Node.js 和 Express 的流行验证库)的启发,ValidatorGo 填补了 Go 生态系统中的空白,实现高效、可定制且简单的字符串验证。由于其他库要么矫枉过正,缺乏功能,要么不满足我的用例,我构建了 validatorgo 来提供实用的解决方案。
使用 go get。
go get github.com/bube054/validatorgo
然后将包导入到您自己的代码中。
import ( "fmt" "github.com/bube054/validatorgo" )
如果您不满意使用长 validatorgo 包名称,您可以这样做。
go get github.com/bube054/validatorgo
import ( "fmt" "github.com/bube054/validatorgo" )
下面是 validatorgo 包提供的验证器列表,涵盖了各种字符串格式和类型,使其能够满足多种验证需求。
验证器 | 描述 |
---|---|
包含 | 检查字符串是否包含指定的子字符串。 |
等于 | 验证字符串是否完全等于比较字符串。 |
IsAbaRouting | 检查字符串是否是有效的 ABA 路由号码(美国银行账户)。 |
之后 | 验证日期字符串是否在指定日期之后。 |
IsAlpha | 确保字符串仅包含字母 (a-zA-Z)。 |
是字母数字 | 验证字符串是否仅包含字母和数字。 |
是Ascii | 检查字符串是否仅包含 ASCII 字符。 |
IsBase32 | 检查字符串是否是有效的 Base32 编码值。 |
IsBase64 | 验证字符串是否采用 Base64 编码。 |
之前 | 确保日期早于指定日期。 |
是布尔值 | 检查字符串是“true”还是“false”。 |
是信用卡 | 验证字符串是否是有效的信用卡号。 |
是货币 | 检查字符串是否是有效的货币格式。 |
是日期 | 验证字符串是否为有效日期。 |
是十进制 | 确保字符串代表有效的十进制数。 |
是电子邮件 | 检查字符串是否是有效的电子邮件地址格式。 |
为空 | 验证字符串是否为空。 |
是FQDN | 检查字符串是否是完全限定的域名。 |
IsFloat | 确保字符串表示浮点数。 |
IsHexColor | 验证字符串是否是有效的十六进制颜色(例如,#FFFFFF)。 |
IsIP | 检查字符串是否是有效的 IP 地址(IPv4 或 IPv6)。 |
是ISO8601 | 验证字符串是否采用 ISO8601 日期格式。 |
长度 | 检查字符串的长度是否在指定范围内。 |
IsMimeType | 验证字符串是否为有效的 MIME 类型。 |
是手机 | 检查字符串是否是指定区域设置的有效手机号码。 |
IsMongoID | 验证字符串是否是有效的 MongoDB ObjectID。 |
是数字 | 确保字符串仅包含数字字符。 |
是邮政编码 | 检查字符串是否是指定区域设置的有效邮政编码。 |
IsRFC3339 | 验证字符串是否采用 RFC3339 日期格式。 |
是鼻涕虫 | 检查字符串是否适合 URL(仅限字母、数字和破折号)。 |
密码强 | 确保字符串满足常见密码强度要求。 |
IsURL | 验证字符串是否为 URL。 |
IsUUID | 检查字符串是否是有效的 UUID(版本 1-5)。 |
是大写 | 确保字符串全部大写。 |
是增值税 | 检查字符串是否是指定国家/地区的有效增值税号。 |
比赛 | 验证字符串是否与指定的正则表达式匹配。 |
该表应该涵盖 validatorgo 中当前可用的大多数验证器。请务必参阅包的文档以了解每个验证器的更详细用法。
⚠ 注意
当使用需要选项结构(指针或非指针)的验证器时,请始终显式地为所有结构字段提供值。
与 validator.js 中缺少的字段会自动设置为默认值不同,Go 使用严格类型。
这意味着布尔值的缺失值默认为 false,数字类型的缺失值默认为 0,等等。
如果您习惯了 JavaScript 版本,不指定所有字段可能会导致意外行为。
示例
go get github.com/bube054/validatorgo
import ( "fmt" "github.com/bube054/validatorgo" )
Sanitizer | Description |
---|---|
Trim | Removes whitespace from both ends of the string. |
LTrim | Removes whitespace from the left side of the string. |
RTrim | Removes whitespace from the right side of the string. |
ToLower | Converts the entire string to lowercase. |
ToUpper | Converts the entire string to uppercase. |
Escape | Escapes HTML characters in the string to prevent injection attacks. |
Unescape | Reverts escaped HTML characters back to normal characters. |
NormalizeEmail | Standardizes an email address, e.g., removing dots in Gmail addresses. |
Blacklist | Removes characters from the string that match specified characters or patterns. |
Whitelist | Retains only characters in the string that match specified characters or patterns. |
Replace | Replaces occurrences of a substring with a specified replacement. |
StripLow | Removes control characters, optionally allowing some specified ones. |
TrimSpace | Trims all types of whitespace from both ends of the string. |
ToBoolean | Converts common truthy and falsy values in strings into boolean true or false. |
ToInt | Converts a numeric string into an integer, if possible. |
ToFloat | Converts a numeric string into a floating-point number, if possible. |
这些清理程序通常用于通过删除或修改潜在不需要或危险的字符来确保数据一致性和安全性。
请务必参考 validatorgo 官方文档,了解每种消毒剂的具体实现和示例。
validatorgo 如果您需要的话,是理想的选择:
通过 validatorgo,您可以获得一个专门为字符串验证而设计的工具,支持 Go 中的独立和 Web 应用程序要求。
以上是简化 Go 中的字符串验证:validatorgo 简介的详细内容。更多信息请关注PHP中文网其他相关文章!