go get github.com/astaxie/beego/validation
package main import ( "github.com/astaxie/beego/validation" "log" ) type User struct { Name string Age int } func main() { u := User{Age: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) } // 定製錯誤信息 u2 := User{"jihite", 10} minAge := 18 valid.Min(u2.Age, minAge, "age").Message("少兒不宜!") // 錯誤信息格式化 valid.Min(u2.Age, minAge, "age").Message("%d不由", minAge) if valid.HasErrors() { for _, err := range valid.Errors { log.Println(err.Key, err.Message) } } }
輸出git
2020/02/07 00:19:31 name Can not be empty 2020/02/07 00:19:31 age Range is 0 to 18 2020/02/07 00:19:33 name Can not be empty 2020/02/07 00:19:33 age Range is 0 to 18 2020/02/07 00:19:45 age 少兒不宜! 2020/02/07 00:21:25 age 18不由
package main 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", Mobile:"13630450678"} b, err := valid.Valid(&u) if err != nil { // handle error } if !b { // validation does not pass // blabla...gg for _, err := range valid.Errors { log.Println(err.Key, err.Message) } } } type User2 struct { Name string Age int } func main2() { u := User2{Age: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) } // 定製錯誤信息 u2 := User2{"jihite", 10} minAge := 18 valid.Min(u2.Age, minAge, "age").Message("少兒不宜!") // 錯誤信息格式化 valid.Min(u2.Age, minAge, "age").Message("%d不由", minAge) if valid.HasErrors() { for _, err := range valid.Errors { log.Println(err.Key, err.Message) } } }
輸出github
2020/02/07 00:33:55 IP.IP Must be a valid ip address
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
,其餘類型都將不能經過驗證