golang,go,博客,开源,编程
govalidator
是一个用 Go 语言编写的轻量级的验证库,提供了丰富的验证和清理功能,主要用于验证和清理用户输入的数据(如表单数据、API 请求的 JSON 数据等)。它支持常见的数据验证功能,如电子邮件、URL、IP 地址、信用卡号等的验证,同时也支持自定义验证规则。
你可以通过 go get
来安装 govalidator
:
go get github.com/asaskevich/govalidator
安装完成后,你就可以在 Go 项目中使用它进行输入验证和数据清理了。
govalidator
提供了两种常见的验证方式:
govalidator
提供的标签来对结构体字段进行验证。常见的验证方法如:govalidator.IsEmail()
、govalidator.IsURL()
等,用于验证字符串是否符合特定规则。
package main
import (
"fmt"
"github.com/asaskevich/govalidator"
)
func main() {
// 验证邮箱
email := "test@example.com"
if govalidator.IsEmail(email) {
fmt.Println(email, "is a valid email address")
} else {
fmt.Println(email, "is NOT a valid email address")
}
// 验证 URL
url := "https://www.example.com"
if govalidator.IsURL(url) {
fmt.Println(url, "is a valid URL")
} else {
fmt.Println(url, "is NOT a valid URL")
}
// 验证 IP 地址
ip := "192.168.0.1"
if govalidator.IsIP(ip) {
fmt.Println(ip, "is a valid IP address")
} else {
fmt.Println(ip, "is NOT a valid IP address")
}
}
govalidator.IsEmail(email)
:检查字符串是否为有效的电子邮件地址。govalidator.IsURL(url)
:检查字符串是否为有效的 URL。govalidator.IsIP(ip)
:检查字符串是否为有效的 IP 地址。govalidator
支持通过结构体标签来进行验证,类似于 json
标签的方式。
package main
import (
"fmt"
"github.com/asaskevich/govalidator"
)
type User struct {
Email string `valid:"email"`
Age int `valid:"range(18|60)"`
}
func main() {
// 创建一个 User 对象
user := User{
Email: "test@example.com",
Age: 25,
}
// 验证结构体
valid, err := govalidator.ValidateStruct(user)
if err != nil {
fmt.Println("Error:", err)
} else if valid {
fmt.Println("User is valid")
} else {
fmt.Println("User is not valid")
}
}
valid:"email"
:验证 Email
字段是否是有效的电子邮件地址。valid:"range(18|60)"
:验证 Age
字段是否在 18 到 60 的范围内。govalidator
提供了大量的内建验证函数,以下是一些常见的验证方法:
govalidator.IsEmail(string)
用来验证是否为有效的电子邮件。govalidator.IsURL(string)
用来验证是否为有效的 URL。govalidator.IsIP(string)
用来验证是否为有效的 IP 地址。govalidator.IsCreditCard(string)
用来验证是否为有效的信用卡号。govalidator.IsDate(string)
用来验证是否为有效的日期。govalidator.IsMobile(string)
用来验证是否为有效的手机号。email := "test@example.com"
if govalidator.IsEmail(email) {
fmt.Println("Valid email")
} else {
fmt.Println("Invalid email")
}
url := "https://example.com"
if govalidator.IsURL(url) {
fmt.Println("Valid URL")
} else {
fmt.Println("Invalid URL")
}
ip := "192.168.1.1"
if govalidator.IsIP(ip) {
fmt.Println("Valid IP")
} else {
fmt.Println("Invalid IP")
}
你可以自定义验证规则,在某些特殊的情况下,govalidator
允许你提供自定义验证器。
// 自定义验证规则
govalidator.CustomTypeTagMap.Set("valid_password", govalidator.CustomValidator(func(str string) bool {
// 密码验证规则:至少6个字符,包含一个数字和一个字母
return len(str) >= 6 && containsDigit(str) && containsLetter(str)
}))
// 用自定义规则验证字段
type User struct {
Password string `valid:"valid_password"`
}
func containsDigit(str string) bool {
for _, c := range str {
if c >= '0' && c <= '9' {
return true
}
}
return false
}
func containsLetter(str string) bool {
for _, c := range str {
if (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') {
return true
}
}
return false
}
func main() {
user := User{Password: "abc123"}
valid, err := govalidator.ValidateStruct(user)
if err != nil {
fmt.Println("Invalid:", err)
} else if valid {
fmt.Println("Valid user")
}
}
govalidator.CustomTypeTagMap.Set("valid_password", ...)
:定义了一个新的验证规则 valid_password
,并且通过一个自定义函数来判断密码是否符合规则。govalidator
还提供了数据清理的功能,比如去除空格、转换大小写等。
str := " hello world "
cleanStr := govalidator.Trim(str) // 去除前后的空格
fmt.Println("Cleaned String:", cleanStr)
str = "hElLo WoRlD"
cleanStr = govalidator.ToLower(str) // 转换为小写
fmt.Println("Lowercase String:", cleanStr)
govalidator.Trim(str)
:去除字符串两端的空格。govalidator.ToLower(str)
:将字符串转换为小写。结构体验证是 govalidator
中非常强大的功能。你可以通过结构体标签指定验证规则,来方便地对结构体的字段进行验证。
type User struct {
Email string `valid:"email"`
Age int `valid:"range(18|100)"`
Website string `valid:"url"`
}
func main() {
user := User{
Email: "test@example.com",
Age: 25,
Website: "https://example.com",
}
// 验证结构体
valid, err := govalidator.ValidateStruct(user)
if err != nil {
fmt.Println("Validation Error:", err)
} else if valid {
fmt.Println("User is valid")
} else {
fmt.Println("User is not valid")
}
}
valid:"email"
:验证邮箱字段是否符合电子邮件格式。valid:"range(18|100)"
:验证年龄是否在 18 到 100 的范围内。valid:"url"
:验证网址是否符合 URL 格式。govalidator
是一个非常强大的库,提供了丰富的功能来验证和清理数据。它支持多种常见的验证功能,如邮箱、URL、IP 地址、信用卡号等,同时也支持自定义验证和数据清理。通过结构体标签,你可以轻松地对输入进行验证,确保数据的正确性。