zoukankan      html  css  js  c++  java
  • beego——表单验证

    安装beengo

    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)
            }
        }
    }

    输出

    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不禁

    通过structTag使用

    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)
            }
        }
    }

    输出

    2020/02/07 00:33:55 IP.IP Must be a valid ip address

    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,其他类型都将不能通过验证
  • 相关阅读:
    mysql多行多列合并为一行一列
    http://testyourvocab.com/
    数据导入报错:Got a packet bigger than‘max_allowed_packet’bytes的问题
    mybatis mapper xml 使用 > <
    Mysql limit
    table tr,td,div ... focus
    Java开发必备的9个英文网站
    MyEclipse中导入Spring 4.0源码
    《算法竞赛入门经典》1.5.6上机练习
    《算法竞赛入门经典》第一章1.5
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/12271691.html
Copyright © 2011-2022 走看看