golang 每日一庫之 govalidator
govalidator
是一個用 Go 語言編寫的輕量級的驗證庫,提供了豐富的驗證和清理功能,主要用於驗證和清理用戶輸入的數據(如表單數據、API 請求的 JSON 數據等)。它支持常見的數據驗證功能,如電子郵件、URL、IP 地址、信用卡號等的驗證,同時也支持自定義驗證規則。
1. 安裝
你可以通過 go get
來安裝 govalidator
:
go get github.com/asaskevich/govalidator
安裝完成後,你就可以在 Go 項目中使用它進行輸入驗證和數據清理了。
2. 基本用法
govalidator
提供了兩種常見的驗證方式:
-
函數式驗證
:通過函數調用來進行驗證。
-
結構體標籤
:通過結構體標籤和
govalidator
提供的標籤來對結構體字段進行驗證。
2.1 函數式驗證
常見的驗證方法如:govalidator.IsEmail()
、govalidator.IsURL()
等,用於驗證字符串是否符合特定規則。
package main
import (
"fmt"
"github.com/asaskevich/govalidator"
)
funcmain() {
// 驗證郵箱
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 地址。
2.2 結構體驗證
govalidator
支持通過結構體標籤來進行驗證,類似於 json
標籤的方式。
package main
import (
"fmt"
"github.com/asaskevich/govalidator"
)
type User struct {
Email string`valid:"email"`
Age int `valid:"range(18|60)"`
}
funcmain() {
// 創建一個 User 對象
user := User{
Email: "test@example.com",
Age: 25,
}
// 驗證結構體
valid, err := govalidator.ValidateStruct(user)
if err != nil {
fmt.Println("Error:", err)
} elseif valid {
fmt.Println("User is valid")
} else {
fmt.Println("User is not valid")
}
}
-
valid:"email"
:驗證
Email
字段是否是有效的電子郵件地址。 -
valid:"range(18|60)"
:驗證
Age
字段是否在 18 到 60 的範圍內。
3. 常見的驗證方法
govalidator
提供了大量的內建驗證函數,以下是一些常見的驗證方法:
3.1 驗證常見數據類型
-
郵箱
:
govalidator.IsEmail(string)
用來驗證是否爲有效的電子郵件。 -
URL
:
govalidator.IsURL(string)
用來驗證是否爲有效的 URL。 -
IP 地址
:
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")
}
3.2 自定義驗證
你可以自定義驗證規則,在某些特殊的情況下,govalidator
允許你提供自定義驗證器。
// 自定義驗證規則
govalidator.CustomTypeTagMap.Set("valid_password", govalidator.CustomValidator(func(str string)bool {
// 密碼驗證規則:至少6個字符,包含一個數字和一個字母
returnlen(str) >= 6 && containsDigit(str) && containsLetter(str)
}))
// 用自定義規則驗證字段
type User struct {
Password string`valid:"valid_password"`
}
funccontainsDigit(str string)bool {
for _, c := range str {
if c >= '0' && c <= '9' {
returntrue
}
}
returnfalse
}
funccontainsLetter(str string)bool {
for _, c := range str {
if (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') {
returntrue
}
}
returnfalse
}
funcmain() {
user := User{Password: "abc123"}
valid, err := govalidator.ValidateStruct(user)
if err != nil {
fmt.Println("Invalid:", err)
} elseif valid {
fmt.Println("Valid user")
}
}
-
govalidator.CustomTypeTagMap.Set("valid_password", ...)
:定義了一個新的驗證規則
valid_password
,並且通過一個自定義函數來判斷密碼是否符合規則。
3.3 清理數據
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)
:將字符串轉換爲小寫。
4. 結構體驗證
結構體驗證是 govalidator
中非常強大的功能。你可以通過結構體標籤指定驗證規則,來方便地對結構體的字段進行驗證。
4.1 結構體字段驗證
type User struct {
Email string`valid:"email"`
Age int `valid:"range(18|100)"`
Website string`valid:"url"`
}
funcmain() {
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)
} elseif valid {
fmt.Println("User is valid")
} else {
fmt.Println("User is not valid")
}
}
-
valid:"email"
:驗證郵箱字段是否符合電子郵件格式。
-
valid:"range(18|100)"
:驗證年齡是否在 18 到 100 的範圍內。
-
valid:"url"
:驗證網址是否符合 URL 格式。
5. 總結
govalidator
是一個非常強大的庫,提供了豐富的功能來驗證和清理數據。它支持多種常見的驗證功能,如郵箱、URL、IP 地址、信用卡號等,同時也支持自定義驗證和數據清理。通過結構體標籤,你可以輕鬆地對輸入進行驗證,確保數據的正確性。
主要特點:
-
簡單易用,函數式和結構體標籤式的驗證方式。
-
支持常見的驗證功能,如電子郵件、URL、手機號、IP 等。
-
支持自定義驗證規則。
-
支持數據清理操作,如去除空格、轉換大小寫等。
標題:golang 每日一庫之 govalidator
作者:mooncakeee
地址:http://blog.dd95828.com/articles/2025/02/10/1739164536237.html
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/MYzCHBs40mosD5jCAwWvZw