# 表單驗證
表單驗證是用于數據驗證和錯誤收集的模塊。
## 安裝及測試
安裝:
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)。
- beego簡介
- 為 beego 貢獻
- 發布版本
- 升級指南
- beego安裝升級
- Bee 工具的使用
- 快速入門
- 新建項目
- 路由設置
- Controller 運行機制
- model 邏輯
- view 編寫
- 靜態文件處理
- beego 的 MVC 架構介紹
- controller 設計
- 參數配置
- 路由設置
- 控制器函數
- XSRF 過濾
- 請求數據處理
- session 控制
- 過濾器
- flash 數據
- URL構建
- 多種格式數據輸出
- 表單數據驗證
- 錯誤處理
- 日志處理
- model設計
- 概述
- ORM 使用
- CRUD 操作
- 高級查詢
- 原生 SQL 查詢
- 構造查詢
- 事務處理
- 模型定義
- 命令模式
- 測試用例
- 自定義字段
- FAQ
- view 設計
- 模板語法指南
- 模板處理
- 模板函數
- 靜態文件處理
- 模板分頁處理
- beego 的模塊設計
- session 模塊
- grace 模塊
- cache 模塊
- logs 模塊
- httplib 模塊
- context 模塊
- toolbox 模塊
- config 模塊
- i18n 模塊
- beego 高級編程
- 進程內監控
- API 自動化文檔
- 應用部署
- 獨立部署
- supervisor 部署
- Nginx 部署
- apache 部署
- beego 第三方庫
- 應用例子
- 在線聊天室
- 短域名服務
- Todo 列表
- beego實用庫
- 驗證碼
- 分頁
- FAQ