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 是一个功能全面且灵活的验证库,适用于各种数据验证场景。通过合理使用,可以大大提高应用程序的数据安全性和可靠性。

回到顶部