[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