golang字符串、数字、切片和结构体验证与清理插件库govalidator的使用
govalidator - Golang 字符串、数字、切片和结构体验证与清理库
govalidator 是一个用于字符串、结构体和集合的验证器和清理器包,基于 validator.js。
安装
确保您的计算机上已安装 Go。在终端中键入以下命令:
go get github.com/asaskevich/govalidator/v11
或者您可以使用 gopkg.in
获取指定版本的包:
go get gopkg.in/asaskevich/govalidator.v10
安装完成后,包就可以使用了。
导入包
在您的 *.go
文件中添加以下行:
import "github.com/asaskevich/govalidator/v11"
如果您不想使用长的 govalidator
,可以这样做:
import (
valid "github.com/asaskevich/govalidator/v11"
)
基本使用示例
字符串验证
package main
import (
"fmt"
"github.com/asaskevich/govalidator"
)
func main() {
// 验证URL
fmt.Println(govalidator.IsURL("http://example.com")) // true
// 验证Email
fmt.Println(govalidator.IsEmail("test@example.com")) // true
// 验证IP地址
fmt.Println(govalidator.IsIP("192.168
更多关于golang字符串、数字、切片和结构体验证与清理插件库govalidator的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang字符串、数字、切片和结构体验证与清理插件库govalidator的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
govalidator 使用指南
govalidator 是一个强大的 Go 语言验证和清理库,用于验证和清理字符串、数字、切片和结构体等数据。下面我将详细介绍它的主要功能和用法。
安装
go get github.com/asaskevich/govalidator
基本验证功能
字符串验证
package main
import (
"fmt"
"github.com/asaskevich/govalidator"
)
func main() {
// 检查字符串是否为URL
fmt.Println(govalidator.IsURL("http://example.com")) // true
// 检查字符串是否为电子邮件
fmt.Println(govalidator.IsEmail("test@example.com")) // true
// 检查字符串是否为IPv4地址
fmt.Println(govalidator.IsIPv4("192.168.1.1")) // true
// 检查字符串是否只包含字母
fmt.Println(govalidator.IsAlpha("abc")) // true
fmt.Println(govalidator.IsAlpha("abc123")) // false
// 检查字符串是否只包含数字
fmt.Println(govalidator.IsNumeric("123")) // true
fmt.Println(govalidator.IsNumeric("123a")) // false
}
数字验证
func main() {
// 检查值是否在范围内
fmt.Println(govalidator.InRange(5, 1, 10)) // true
fmt.Println(govalidator.InRange(15, 1, 10)) // false
// 检查是否为整数
fmt.Println(govalidator.IsInt("123")) // true
fmt.Println(govalidator.IsInt("123.45")) // false
// 检查是否为浮点数
fmt.Println(govalidator.IsFloat("123.45")) // true
}
结构体验证
govalidator 支持通过标签验证结构体字段:
package main
import (
"fmt"
"github.com/asaskevich/govalidator"
)
type User struct {
Name string `valid:"required,alpha"`
Age int `valid:"required,range(18|99)"`
Email string `valid:"required,email"`
Password string `valid:"required,length(6|20)"`
}
func main() {
user := User{
Name: "John",
Age: 25,
Email: "john@example.com",
Password: "secret123",
}
result, err := govalidator.ValidateStruct(user)
if err != nil {
fmt.Println("Validation errors:", err)
} else {
fmt.Println("Validation passed:", result)
}
}
自定义验证器
你可以创建自定义验证函数:
package main
import (
"fmt"
"github.com/asaskevich/govalidator"
)
func init() {
// 注册自定义验证函数
govalidator.CustomTypeTagMap.Set("custom_validation", func(i interface{}, o interface{}) bool {
// 自定义验证逻辑
str, ok := i.(string)
if !ok {
return false
}
return str == "valid_value"
})
}
type Data struct {
Field string `valid:"custom_validation"`
}
func main() {
data := Data{Field: "valid_value"}
result, err := govalidator.ValidateStruct(data)
fmt.Println(result, err) // true <nil>
data.Field = "invalid"
result, err = govalidator.ValidateStruct(data)
fmt.Println(result, err) // false Field: Field does not validate as custom_validation
}
数据清理
govalidator 也提供数据清理功能:
package main
import (
"fmt"
"github.com/asaskevich/govalidator"
)
func main() {
// 清理HTML,移除危险标签和属性
html := `<script>alert("xss")</script><p>Safe content</p>`
safeHtml := govalidator.SanitizeHtml(html)
fmt.Println(safeHtml) // <p>Safe content</p>
// 移除字符串中的非字母字符
str := "Hello! 123 World!"
cleanStr := govalidator.Alpha(str)
fmt.Println(cleanStr) // HelloWorld
// 转换为安全文件名
filename := "my/unsafe*file?.txt"
safeFilename := govalidator.SafeFileName(filename)
fmt.Println(safeFilename) // myunsafefile.txt
}
切片验证
package main
import (
"fmt"
"github.com/asaskevich/govalidator"
)
func main() {
// 检查切片中所有元素是否都是数字
numbers := []string{"1", "2", "3"}
fmt.Println(govalidator.IsNumeric(numbers...)) // true
// 检查切片中至少有一个元素满足条件
emails := []string{"test@example.com", "invalid"}
fmt.Println(govalidator.HasAny(emails, govalidator.IsEmail)) // true
}
高级用法
条件验证
package main
import (
"fmt"
"github.com/asaskevich/govalidator"
)
type Order struct {
PaymentMethod string `valid:"required,in(credit|debit|cash)"`
CardNumber string `valid:"required_if=PaymentMethod credit|debit,length(16|16)"`
}
func main() {
order := Order{
PaymentMethod: "credit",
CardNumber: "1234567890123456",
}
result, err := govalidator.ValidateStruct(order)
fmt.Println(result, err) // true <nil>
order.CardNumber = "1234"
result, err = govalidator.ValidateStruct(order)
fmt.Println(result, err) // false 错误信息
}
错误消息自定义
package main
import (
"fmt"
"github.com/asaskevich/govalidator"
)
type Product struct {
Name string `valid:"required~产品名称不能为空"`
Price int `valid:"required~价格不能为空,range(1|1000)~价格必须在1到1000之间"`
}
func main() {
product := Product{
Name: "",
Price: 0,
}
_, err := govalidator.ValidateStruct(product)
if err != nil {
fmt.Println(err) // 产品名称不能为空;价格不能为空;价格必须在1到1000之间
}
}
govalidator 是一个功能全面且灵活的验证库,适用于各种数据验证场景。通过合理使用,可以大大提高应用程序的数据安全性和可靠性。