beego的validation表单验证库的使用
下载beego/validation
go get github.com/astaxie/beego/validation
直接用途
package main
import (
"fmt"
"github.com/astaxie/beego/validation"
)
type User struct {
Name string
Age int
}
func main() {
//// 修改默认的错误提示信息
validation.SetDefaultMessage(map[string]string{
"Required": "必填字段,不能为空",
"Max": "允许的最大年龄是 %d",
"Range": "允许的年龄范围是:%d-%d",
})
u := User{Age: 141}
valid := validation.Validation{}
valid.Required(u.Name, "name:姓名")
valid.Max(u.Age, 140, "age:年龄")
valid.Range(u.Age, 0, 140, "age")
// 1. 获取一个验证的错误结果
/*
ret1 := valid.Max(u.Age, 140, "age:年龄")
if !ret1.Ok {
fmt.Println(ret1.Error.Key, ret1.Error.Message)
}
*/
// 2. 获取所有验证的错误结果
if valid.HasErrors() {
for _, err := range valid.Errors {
fmt.Println(err.Key, err.Message)
}
}
}
结构体标签使用
package main
import (
"fmt"
"github.com/astaxie/beego/validation"
"regexp"
"strings"
)
type user struct {
Name string `valid:"Required;Match(/^(test)?\\w*@;com$/)"`
Age int `valid:"Required;Range(0,140)"`
}
func main() {
//// 修改默认的错误提示信息
validation.SetDefaultMessage(map[string]string{
"Required": "必填字段:不能为空",
"Max": "允许的最大年龄是:%d",
"Range": "允许的年龄范围是:%d-%d",
"Match": "正则表达式不匹配:请检查 %s",
})
valid := validation.Validation{}
u := user{Name: "testMaya@;com1", Age: 180}
b, err := valid.Valid(&u)
if b {
fmt.Println("验证成功")
}else{
fmt.Printf("验证失败:%v\n", err)
}
if valid.HasErrors() {
for _, err := range valid.Errors {
// 正则表达式不想对外暴露,所以切割去掉了
if ok, _ := regexp.MatchString("^.*\\.Match$", err.Key); ok {
fmt.Println(err.Key, strings.Split(err.Message, ":")[0])
}else {
fmt.Println(err.Key, err.Message)
}
}
}
}
自定义添加函数
package main
import (
"fmt"
"github.com/astaxie/beego/validation"
"strings"
)
func IsMe(v *validation.Validation, obj interface{}, key string) {
name, ok := obj.(string)
if !ok {
_ = v.SetError(strings.Split(key, ".")[0], "必须是字符串类型")
return
}
if name != "me" {
_ = v.SetError(key, "is not me!")
}
}
type user struct {
Name string `valid:"Required;IsMe"`
Age int `valid:"Required;Range(0,140);IsMe"`
}
func main() {
//// 修改默认的错误提示信息
validation.SetDefaultMessage(map[string]string{
"Required": "必填字段:不能为空",
"Max": "允许的最大年龄是:%d",
"Range": "允许的年龄范围是:%d-%d",
"Match": "正则表达式不匹配:请检查 %s",
})
err := validation.AddCustomFunc("IsMe", IsMe)
if err != nil {
fmt.Println(err)
}
valid := validation.Validation{}
u := user{"me", 18}
b, err := valid.Valid(&u)
if !b {
fmt.Println("验证失败", err)
}
if valid.HasErrors() {
for _, err := range valid.Errors {
fmt.Println(err.Key, err.Message)
}
}
}
结构体标签内置函数
Required
Min(min int)
Max(max int)
Range(min, max int)
MinSize(min int)
MaxSize(max int)
Length(length int)
Alpha
Numeric
AlphaNumeric
Match(pattern string)
AlphaDash
Email
IP
Base64
Mobile
Tel
Phone
ZipCode
综合案例,包括手机号长度和手机号是否有效验证
package main
import (
"fmt"
"github.com/astaxie/beego/validation"
"strings"
)
func IsMe(v *validation.Validation, obj interface{}, key string) {
name, ok := obj.(string)
if !ok {
_ = v.SetError(strings.Split(key, ".")[0], "必须是字符串类型")
return
}
if name != "me" {
_ = v.SetError(key, "is not me!")
}
}
type user struct {
Name string `valid:"Required;IsMe"`
Age int `valid:"Required;Range(0,140)"`
Phone string `valid:"Required;Length(11);Mobile"`
}
func main() {
//// 修改默认的错误提示信息
validation.SetDefaultMessage(map[string]string{
"Required": "必填字段:不能为空",
"Max": "允许的最大年龄是:%d",
"Range": "允许的年龄范围是:%d-%d",
"Match": "正则表达式不匹配:请检查 %s",
"Length": "长度必须是:%d位",
})
err := validation.AddCustomFunc("IsMe", IsMe)
if err != nil {
fmt.Println(err)
}
valid := validation.Validation{}
u := user{"me", 18, "29566556655"}
b, err := valid.Valid(&u)
if !b {
fmt.Println("验证失败", err)
}
if valid.HasErrors() {
for _, err := range valid.Errors {
fmt.Println(err.Message)
}
}
}
分类:
golang第三方库
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)