beego表單數(shù)據(jù)驗(yàn)證

2023-11-20 18:06 更新

表單驗(yàn)證

表單驗(yàn)證是用于數(shù)據(jù)驗(yàn)證和錯(cuò)誤收集的模塊。

安裝及測(cè)試

安裝:

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ù):

  • Required 不為空,即各個(gè)類型要求不為其零值
  • Min(min int) 最小值,有效類型:int,其他類型都將不能通過驗(yàn)證
  • Max(max int) 最大值,有效類型:int,其他類型都將不能通過驗(yàn)證
  • Range(min, max int) 數(shù)值的范圍,有效類型:int,他類型都將不能通過驗(yàn)證
  • MinSize(min int) 最小長(zhǎng)度,有效類型:string slice,其他類型都將不能通過驗(yàn)證
  • MaxSize(max int) 最大長(zhǎng)度,有效類型:string slice,其他類型都將不能通過驗(yàn)證
  • Length(length int) 指定長(zhǎng)度,有效類型:string slice,其他類型都將不能通過驗(yàn)證
  • Alpha alpha字符,有效類型:string,其他類型都將不能通過驗(yàn)證
  • Numeric 數(shù)字,有效類型:string,其他類型都將不能通過驗(yàn)證
  • AlphaNumeric alpha 字符或數(shù)字,有效類型:string,其他類型都將不能通過驗(yàn)證
  • Match(pattern string) 正則匹配,有效類型:string,其他類型都將被轉(zhuǎn)成字符串再匹配(fmt.Sprintf("%v", obj).Match)
  • AlphaDash alpha 字符或數(shù)字或橫杠 -_,有效類型:string,其他類型都將不能通過驗(yàn)證
  • Email 郵箱格式,有效類型:string,其他類型都將不能通過驗(yàn)證
  • IP IP 格式,目前只支持 IPv4 格式驗(yàn)證,有效類型:string,其他類型都將不能通過驗(yàn)證
  • Base64 base64 編碼,有效類型:string,其他類型都將不能通過驗(yàn)證
  • Mobile 手機(jī)號(hào),有效類型:string,其他類型都將不能通過驗(yàn)證
  • Tel 固定電話號(hào),有效類型:string,其他類型都將不能通過驗(yàn)證
  • Phone 手機(jī)號(hào)或固定電話號(hào),有效類型:string,其他類型都將不能通過驗(yàn)證
  • ZipCode 郵政編碼,有效類型:string,其他類型都將不能通過驗(yàn)證

API 文檔

請(qǐng)移步 Go Walker。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)