表單驗證是用於數據驗證和錯誤收集的模塊。
安裝:
go get github.com/astaxie/beego/validation
測試:
go test github.com/astaxie/beego/validation
示例1:直接使用
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使用
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,其他類型都將不能通過驗證Alphaalpha字符,有效類型:string,其他類型都將不能通過驗證Numeric數字,有效類型:string,其他類型都將不能通過驗證AlphaNumericalpha 字符或數字,有效類型:string,其他類型都將不能通過驗證Match(pattern string)正則匹配,有效類型:string,其他類型都將被轉成字符串再匹配(fmt.Sprintf(“%v”, obj).Match)AlphaDashalpha 字符或數字或橫杠-_,有效類型:string,其他類型都將不能通過驗證Email郵箱格式,有效類型:string,其他類型都將不能通過驗證IPIP 格式,目前只支持 IPv4 格式驗證,有效類型:string,其他類型都將不能通過驗證Base64base64 編碼,有效類型:string,其他類型都將不能通過驗證Mobile手機號,有效類型:string,其他類型都將不能通過驗證Tel固定電話號,有效類型:string,其他類型都將不能通過驗證Phone手機號或固定電話號,有效類型:string,其他類型都將不能通過驗證ZipCode郵政編碼,有效類型:string,其他類型都將不能通過驗證
