表單資料驗證

尹成發表於2018-11-15

#安裝及測試
##安裝:

go get github.com/astaxie/beego/validation

##測試:

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() {
        // 如果有錯誤資訊,證明驗證沒通過
        // 列印錯誤資訊
        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 使用示例:

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,其他型別都將不能通過驗證
  • MinSize(min int) 最小長度,有效型別:string,slice,其他型別都將不能通過驗證
  • MaxSize(max int) 最大長度,有效型別:string,slice,其他型別都將不能通過驗證
  • Length(length int) 指定長度,有效型別:string,slice,其他型別都將不能通過驗證
  • Numeric數字,有效型別:string,其他型別都將不能通過驗證
  • AlphaNumeric alpha字元或數字,有效型別:string,其他型別都將不能通過驗證
  • Match(pattern string)正則匹配,有效型別:string,其他型別都將被轉成字串再匹配(fmt.Sprintf(“%v”, obj).Match)
  • IP IP 格式,目前只支援 IPv4格式驗證,有效型別:string,其他型別都將不能通過驗證
  • Base64 base64編碼,有效型別:string,其他型別都將不能通過驗證
  • Tel固定電話號,有效型別:string,其他型別都將不能通過驗證
  • Phone手機號或固定電話號,有效型別:string,其他型別都將不能通過驗證
  • ZipCode郵政編碼,有效型別:string,其他型別都將不能通過驗證

學院Go語言視訊主頁
https://edu.csdn.net/lecturer/1928

清華團隊帶你實戰區塊鏈開發
掃碼獲取海量視訊及原始碼 QQ群:721929980
在這裡插入圖片描述

相關文章