• 表单验证
    • 安装及测试
    • 示例
      • API 文档

    表单验证

    表单验证是用于数据验证和错误收集的模块。

    安装及测试

    安装:

    1. go get github.com/astaxie/beego/validation

    测试:

    1. go test github.com/astaxie/beego/validation

    示例

    直接使用示例:

    1. import (
    2. "github.com/astaxie/beego/validation"
    3. "log"
    4. )
    5. type User struct {
    6. Name string
    7. Age int
    8. }
    9. func main() {
    10. u := User{"man", 40}
    11. valid := validation.Validation{}
    12. valid.Required(u.Name, "name")
    13. valid.MaxSize(u.Name, 15, "nameMax")
    14. valid.Range(u.Age, 0, 18, "age")
    15. if valid.HasErrors() {
    16. // 如果有错误信息,证明验证没通过
    17. // 打印错误信息
    18. for _, err := range valid.Errors {
    19. log.Println(err.Key, err.Message)
    20. }
    21. }
    22. // or use like this
    23. if v := valid.Max(u.Age, 140, "age"); !v.Ok {
    24. log.Println(v.Error.Key, v.Error.Message)
    25. }
    26. // 定制错误信息
    27. minAge := 18
    28. valid.Min(u.Age, minAge, "age").Message("少儿不宜!")
    29. // 错误信息格式化
    30. valid.Min(u.Age, minAge, "age").Message("%d不禁", minAge)
    31. }

    通过 StructTag 使用示例:

    1. import (
    2. "log"
    3. "strings"
    4. "github.com/astaxie/beego/validation"
    5. )
    6. // 验证函数写在 "valid" tag 的标签里
    7. // 各个函数之间用分号 ";" 分隔,分号后面可以有空格
    8. // 参数用括号 "()" 括起来,多个参数之间用逗号 "," 分开,逗号后面可以有空格
    9. // 正则函数(Match)的匹配模式用两斜杠 "/" 括起来
    10. // 各个函数的结果的 key 值为字段名.验证函数名
    11. type user struct {
    12. Id int
    13. Name string `valid:"Required;Match(/^Bee.*/)"` // Name 不能为空并且以 Bee 开头
    14. Age int `valid:"Range(1, 140)"` // 1 <= Age <= 140,超出此范围即为不合法
    15. Email string `valid:"Email; MaxSize(100)"` // Email 字段需要符合邮箱格式,并且最大长度不能大于 100 个字符
    16. Mobile string `valid:"Mobile"` // Mobile 必须为正确的手机号
    17. IP string `valid:"IP"` // IP 必须为一个正确的 IPv4 地址
    18. }
    19. // 如果你的 struct 实现了接口 validation.ValidFormer
    20. // 当 StructTag 中的测试都成功时,将会执行 Valid 函数进行自定义验证
    21. func (u *user) Valid(v *validation.Validation) {
    22. if strings.Index(u.Name, "admin") != -1 {
    23. // 通过 SetError 设置 Name 的错误信息,HasErrors 将会返回 true
    24. v.SetError("Name", "名称里不能含有 admin")
    25. }
    26. }
    27. func main() {
    28. valid := validation.Validation{}
    29. u := user{Name: "Beego", Age: 2, Email: "dev@beego.me"}
    30. b, err := valid.Valid(&u)
    31. if err != nil {
    32. // handle error
    33. }
    34. if !b {
    35. // validation does not pass
    36. // blabla...
    37. for _, err := range valid.Errors {
    38. log.Println(err.Key, err.Message)
    39. }
    40. }
    41. }

    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,其他类型都将不能通过验证
    • 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,其他类型都将不能通过验证

    API 文档

    请移步 Go Walker。