[TOC]
# 表单验证
表单验证是用于数据验证和错误收集的模块。
## 安装及测试
安装:
go get github.com/astaxie/beego/validation
测试:
go test github.com/astaxie/beego/validation
## 示例
直接使用示例:
```go
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)
}
```
通过 StructTag 使用示例:
```go
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`,其他类型都将不能通过验证
### API 文档
请移步 [Go Walker](http://gowalker.org/github.com/astaxie/beego/validation)。
- 写在前面的话
- 第0章 beego 简介
- 0.1 为beego贡献
- 0.2 发布版本
- 0.3 升级指南
- 第1章 安装升级
- 1.1 bee工具的使用
- 第2章 快速入门
- 2.1 新建项目
- 2.2 路由设置
- 2.3 Controller运行机制
- 2.4 Model逻辑
- 2.5 View编写
- 2.6 静态文件处理
- 第3章 beego的MVC架构
- 3.1 Model设计
- 3.1.1 概述
- 3.1.2 ORM使用
- 3.1.3 CRUD操作
- 3.1.4 高级查询
- 3.1.5 原生SQL查询
- 3.1.6 构造查询
- 3.1.7 事物处理
- 3.1.8 模型定义
- 3.1.9 命令模式
- 3.1.10 测试用例
- 3.1.11 自定义字段
- 3.1.12 FAQ
- 3.2 View设计
- 3.2.1 模板语法指南
- 3.2.2 模板处理
- 3.2.3 模板函数
- 3.2.4 静态文件处理
- 3.2.5 模板分页处理
- 3.3 Controller设计
- 3.3.1 参数配置
- 3.3.2 路由设置
- 3.3.3 控制器函数
- 3.3.4 XSRF过滤
- 3.3.5 请求数据处理
- 3.3.6 session 控制
- 3.3.7 过滤器
- 3.3.8 flash 数据
- 3.3.9 URL构建
- 3.3.10 多种格式数据输出
- 3.3.11 表单数据验证
- 3.3.12 错误处理
- 3.3.13 日志处理
- 第4章 beego的模块设计
- 4.1 session 模块
- 4.2 grace 模块
- 4.3 cache 模块
- 4.4 logs 模块
- 4.5 httplib 模块
- 4.6 context 模块
- 4.7 toolbox 模块
- 4.8 config 模块
- 4.9 i18n 模块
- 第5章 beego高级编程
- 5.1 进程内监控
- 5.2 API自动化文档
- 第6章 应用部署
- 6.1 独立部署
- 6.2 Supervisor部署
- 6.3 Nginx 部署
- 6.4 Apache 部署
- 第7章 第三方库
- 第8章 应用例子
- 8.1 在线聊天室
- 8.2 短域名服务
- 8.3 Todo列表
- 第9章 FAQ