W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
表單驗(yàn)證是用于數(shù)據(jù)驗(yàn)證和錯(cuò)誤收集的模塊。
安裝:
go get github.com/astaxie/beego/validation
測(cè)試:
go test github.com/astaxie/beego/validation
直接使用示例:
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() {
// 如果有錯(cuò)誤信息,證明驗(yàn)證沒通過
// 打印錯(cuò)誤信息
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)
}
// 定制錯(cuò)誤信息
minAge := 18
valid.Min(u.Age, minAge, "age").Message("少兒不宜!")
// 錯(cuò)誤信息格式化
valid.Min(u.Age, minAge, "age").Message("%d不禁", minAge)
}
通過 StructTag 使用示例:
import (
"log"
"strings"
"github.com/astaxie/beego/validation"
)
// 驗(yàn)證函數(shù)寫在 "valid" tag 的標(biāo)簽里
// 各個(gè)函數(shù)之間用分號(hào) ";" 分隔,分號(hào)后面可以有空格
// 參數(shù)用括號(hào) "()" 括起來,多個(gè)參數(shù)之間用逗號(hào) "," 分開,逗號(hào)后面可以有空格
// 正則函數(shù)(Match)的匹配模式用兩斜杠 "/" 括起來
// 各個(gè)函數(shù)的結(jié)果的 key 值為字段名.驗(yàn)證函數(shù)名
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 字段需要符合郵箱格式,并且最大長(zhǎng)度不能大于 100 個(gè)字符
Mobile string `valid:"Mobile"` // Mobile 必須為正確的手機(jī)號(hào)
IP string `valid:"IP"` // IP 必須為一個(gè)正確的 IPv4 地址
}
// 如果你的 struct 實(shí)現(xiàn)了接口 validation.ValidFormer
// 當(dāng) StructTag 中的測(cè)試都成功時(shí),將會(huì)執(zhí)行 Valid 函數(shù)進(jìn)行自定義驗(yàn)證
func (u *user) Valid(v *validation.Validation) {
if strings.Index(u.Name, "admin") != -1 {
// 通過 SetError 設(shè)置 Name 的錯(cuò)誤信息,HasErrors 將會(huì)返回 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 可用的驗(yàn)證函數(shù):
請(qǐng)移步 Go Walker。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: