beego——表单验证
表单验证是用于数据验证和错误收集的模块。
安装:
1 | go get github.com/astaxie/beego/validation |
测试:
1 | go test github.com/astaxie/beego/validation |
示例1:直接使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | import ( "github.com/astaxie/beego/validation" "log" ) type User struct { Name string Age int } func main() { u := User{ "man" , 40} valid := validation.Validation{} //实例化一个验证对象 valid.Required(u.Name, "name" ) //不能为空 valid.MaxSize(u.Name, 15, "nameMax" ) //最大长度 valid.Range(u.Age, 0, 18, "age" ) //数值返回 if valid.HasErrors() { // 如果有错误信息,证明验证没通过 // 打印错误信息 for _, err := range valid.Errors { log.Println(err.Key, err.Message) } } // or use like this if v := valid.Max(u.Age, 140, "age" ); !v.Ok { log.Println(v.Error.Key, v.Error.Message) } // 定制错误信息 minAge := 18 valid.Min(u.Age, minAge, "age" ).Message( "少儿不宜!" ) // 错误信息格式化 valid.Min(u.Age, minAge, "age" ).Message( "%d不禁" , minAge) } |
示例2:通过StructTag使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | import ( "log" "strings" "github.com/astaxie/beego/validation" ) // 验证函数写在 "valid" tag 的标签里 // 各个函数之间用分号 ";" 分隔,分号后面可以有空格 // 参数用括号 "()" 括起来,多个参数之间用逗号 "," 分开,逗号后面可以有空格 // 正则函数(Match)的匹配模式用两斜杠 "/" 括起来 // 各个函数的结果的 key 值为字段名.验证函数名 type user struct { Id int Name string `valid: "Required;Match(/^Bee.*/)" ` // Name 不能为空并且以 Bee 开头 Age int `valid: "Range(1, 140)" ` // 1 <= Age <= 140,超出此范围即为不合法 Email string `valid: "Email; MaxSize(100)" ` // Email 字段需要符合邮箱格式,并且最大长度不能大于 100 个字符 Mobile string `valid: "Mobile" ` // Mobile 必须为正确的手机号 IP string `valid: "IP" ` // IP 必须为一个正确的 IPv4 地址 } // 如果你的 struct 实现了接口 validation.ValidFormer // 当 StructTag 中的测试都成功时,将会执行 Valid 函数进行自定义验证 func (u *user) Valid(v *validation.Validation) { if strings.Index(u.Name, "admin" ) != -1 { // 通过 SetError 设置 Name 的错误信息,HasErrors 将会返回 true v.SetError( "Name" , "名称里不能含有 admin" ) } } func main() { valid := validation.Validation{} u := user{Name: "Beego" , Age: 2, Email: "dev@beego.me" } b, err := valid.Valid(&u) if err != nil { // handle error } if !b { // validation does not pass // blabla... for _, err := range valid.Errors { log.Println(err.Key, err.Message) } } } |
StructTag 可用的验证函数:
Required
不为空,即各个类型要求不为其零值Min(min int)
最小值,有效类型:int
,其他类型都将不能通过验证Max(max int)
最大值,有效类型:int
,其他类型都将不能通过验证Range(min, max int)
数值的范围,有效类型:int
,他类型都将不能通过验证MinSize(min int)
最小长度,有效类型:string slice
,其他类型都将不能通过验证MaxSize(max int)
最大长度,有效类型:string slice
,其他类型都将不能通过验证Length(length int)
指定长度,有效类型:string slice
,其他类型都将不能通过验证Alpha
alpha字符,有效类型:string
,其他类型都将不能通过验证Numeric
数字,有效类型:string
,其他类型都将不能通过验证AlphaNumeric
alpha 字符或数字,有效类型:string
,其他类型都将不能通过验证Match(pattern string)
正则匹配,有效类型:string
,其他类型都将被转成字符串再匹配(fmt.Sprintf(“%v”, obj).Match)AlphaDash
alpha 字符或数字或横杠-_
,有效类型:string
,其他类型都将不能通过验证Email
邮箱格式,有效类型:string
,其他类型都将不能通过验证IP
IP 格式,目前只支持 IPv4 格式验证,有效类型:string
,其他类型都将不能通过验证Base64
base64 编码,有效类型:string
,其他类型都将不能通过验证Mobile
手机号,有效类型:string
,其他类型都将不能通过验证Tel
固定电话号,有效类型:string
,其他类型都将不能通过验证Phone
手机号或固定电话号,有效类型:string
,其他类型都将不能通过验证ZipCode
邮政编码,有效类型:string
,其他类型都将不能通过验证
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2017-12-15 Redis重大版本
2017-12-15 MySQL——存储引擎
2017-12-15 Redis使用场景
2017-12-15 查看一张表的信息