gf框架gvalid使用

package main

import "github.com/gogf/gf/util/gvalid"
import "fmt"

func main() {
    //vRequired()
    //vRequiredIf()
    //vRequiredUnless()
    //vRequiredWith()
    //vRequiredWithAll()
    //vRequiredWithout()
    //vRequiredWithoutAll()
    //vDate()
    //vDateFormat()
    //vEmail()
    //vPhone()
    //vTelephone()
    //vPassport()
    //vPassword()
    //vPassword2()
    //vPassword3()
    //vPostcode()
    //vIdNumber()
    //vLuhn()
    //vQQ()
    //vIp()
    //vIpv4()
    //vIpv6()
    //vMac()
    //vUrl()
    //vDomain()
    //vLength()
    //vMinLength()
    //vMaxLength()
    //vBetween()
    //vMin()
    //vMax()
    //vJSON()
    //vInteger()
    //vFloat()
    //vBoolean()
    //vSame()
    //vDifferent()
    //vIn()
    //vNotIn()
    //vRegex()
    //vMap()
    vMsg()
}

// 必需参数
// required
// 格式:required
func vRequired() {
    if err := gvalid.Check("", "required", nil); err != nil{
        fmt.Println(err.Strings())
        fmt.Println(err.Maps())
    }
}


// 给定字段值与所给值相等时
// required-if
// 格式: required-if:field,value,...
// 说明:必需参数(当任意所给定字段值与所给值相等时,即:当field字段的值为value时,当前验证字段为必须参数)
func vRequiredIf(){
    type User struct {
        A string
        B string `valid:"b@required-if:A,1"`
    }

    var user = User{"1", ""}
    if err := gvalid.CheckStruct(&user, nil); err != nil{
        fmt.Println(err.Strings())
        fmt.Println(err.Maps())
    }
}


// 给定字段值与所给值都不相等时
// required-unless
// 格式: required-unless:field,value,...
// 说明:必需参数(当所给定字段值与所给值都不相等时,即:当field字段的值不为value时,当前验证字段为必须参数)
func vRequiredUnless() {
    type User struct {
        A string
        B string `valid:"b@required-unless:A,1"`
    }

    var user = User{"2", ""}
    if err := gvalid.CheckStruct(&user, nil); err != nil{
        fmt.Println(err.Strings())
        fmt.Println(err.Maps())
    }
}


// 给定任意字段值不为空时
// required-with
// 格式: required-with:field1,field2,...
// 说明:必需参数(当所给定任意字段值不为空时)
func vRequiredWith() {
    type User struct {
        A string
        B string `valid:"b@required-with:A,C"`
        C string
    }

    var user = User{"a", "", "c"}
    if err := gvalid.CheckStruct(&user, nil); err != nil{
        fmt.Println(err.Strings())
        fmt.Println(err.Maps())
    }
}


// 给定所有字段值都不为空时
// required-with-all
// 格式: required-with-all:field1,field2,...
// 说明:必须参数(当所给定所有字段值都不为空时)
func vRequiredWithAll() {
    type User struct {
        A string
        B string `valid:"b@required-with-all:A,C"`
        C string
    }

    var user = User{"a", "", "c"}
    if err := gvalid.CheckStruct(&user, nil); err != nil{
        fmt.Println(err.Strings())
        fmt.Println(err.Maps())
    }
}


// 给定任意字段值为空时
// required-without
// 格式: required-without:field1,field2,...
// 说明:必需参数(当所给定任意字段值为空时)
func vRequiredWithout() {
    type User struct {
        A string
        B string `valid:"b@required-without:A,C"`
        C string
    }

    var user = User{"", "", "c"}
    if err := gvalid.CheckStruct(&user, nil); err != nil{
        fmt.Println(err.Strings())
        fmt.Println(err.Maps())
    }
}


// 给定所有字段值都为空时
// required-without-all
// 格式: required-without-all:field1,field2,...
// 说明:必须参数(当所给定所有字段值都为空时)
func vRequiredWithoutAll() {
    type User struct {
        A string
        B string `valid:"b@required-without-all:A,C"`
        C string
    }

    var user = User{"", "", ""}
    if err := gvalid.CheckStruct(&user, nil); err != nil{
        fmt.Println(err.Strings())
        fmt.Println(err.Maps())
    }
}


// 日期类型
// date
// 格式: date
// 说明:参数为常用日期类型,日期之间支持的连接符号-或/或.,也支持不带连接符号的8位长度日期,
// 格式如: 2006-01-02, 2006/01/02, 2006.01.02, 20060102, 01-Nov-2018, 01.Nov.018, 01/Nov/2018
func vDate() {
    rule := `date`
    if err := gvalid.Check("2020-01-07", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


// 自定义时间日期验证
// 格式:date-format:format
func vDateFormat() {
    rule := `date-format:2006-01-02 15:04:05`
    if err := gvalid.Check("2020-01-07:14:02:00", rule, nil); err != nil{
        fmt.Println(err.Strings())
        fmt.Println(err.Maps())
    }
}


// EMAIL邮箱地址
// email
// 格式: email
// 说明:EMAIL邮箱地址
func vEmail() {
    rule := `email`
    if err := gvalid.Check("xx@xx.xx", rule, nil); err != nil{
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


// 手机号
// phone
// 格式: phone
// 说明:手机号
func vPhone() {
    rule := `phone`
    if err := gvalid.Check("13888888888", rule, nil); err != nil{
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


// 国内座机电话号码
// telephone
// 格式: telephone
// 说明:国内座机电话号码,"XXXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"、"XXXXXXXX"
func vTelephone() {
    rule := `telephone`
    if err := gvalid.Check("0111-12345678", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


// 通用帐号规则
// passport
// 格式: passport
// 说明:通用帐号规则(字母开头,只能包含字母、数字和下划线,长度在6~18之间)
func vPassport() {
    rule := `passport`
    if err := gvalid.Check("admin", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


// 通用密码
// password
// 格式: password
// 说明:通用密码(任意可见字符,长度在6~18之间)
func vPassword() {
    rule := `password`
    if err := gvalid.Check("123", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


// 中等强度密码
// password2
// 格式: password2
// 说明:中等强度密码(在弱密码的基础上,必须包含大小写字母和数字)
func vPassword2() {
    rule := `password2`
    if err := gvalid.Check("123Abc", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


// 强等强度密码
// password3
// 格式: password3
// 说明:强等强度密码(在弱密码的基础上,必须包含大小写字母、数字和特殊字符)
func vPassword3() {
    rule := `password3`
    if err := gvalid.Check("123Abc@", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


// 中国邮政编码
// postcode
// 格式: postcode
// 说明:中国邮政编码
func vPostcode() {
    rule := `postcode`
    if err := gvalid.Check("1234124", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


// 公民身份证号码
// id-number
// 格式: id-number
// 说明:公民身份证号码
func vIdNumber() {
    rule := `id-number`
    if err := gvalid.Check("340622199601016631", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


// 银行卡号校验
// luhn
// 格式: luhn
// 说明:银行卡号校验
func vLuhn() {
    rule := `luhn`
    if err := gvalid.Check("621226202001015588", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


// 腾讯QQ号码
// qq
// 格式: qq
// 说明:腾讯QQ号码
func vQQ() {
    rule := `qq`
    if err := gvalid.Check("1227716207", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


// IPv4/IPv6地址
// ip
// 格式: ip
// 说明:IPv4/IPv6地址
func vIp() {
    rule := `ip`
    if err := gvalid.Check("192.168.1.1", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


// IPv4地址
// ipv4
// 格式: ipv4
// 说明:IPv4地址
func vIpv4() {
    rule := `ipv4`
    if err := gvalid.Check("192.168.1.1", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


// IPv6地址
// ipv6
// 格式: ipv6
// 说明:IPv6地址
func vIpv6() {
    rule := `ipv6`
    if err := gvalid.Check("ae80::ebc8:9f54:20ac:b32b", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


// MAC地址
// mac
// 格式: mac
// 说明:MAC地址
func vMac() {
    rule := `mac`
    if err := gvalid.Check("a1:00:ec:21:32:22", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}



// url
// 格式: url
// 说明:URL
func vUrl() {
    rule := `url`
    if err := gvalid.Check("http://127.0.0.1:8080/get_user", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}



// 域名
// domain
// 格式: domain
// 说明:域名
func vDomain() {
    rule := `domain`
    if err := gvalid.Check("a.net", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


// 参数长度为min到max
// length
// 格式: length:min,max
// 说明:参数长度为min到max(长度参数为整形),注意中文一个汉字占3字节
func vLength() {
    rule := `length:6,10`
    if err := gvalid.Check("hello", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}



// 参数长度最小为min
// min-length
// 格式: min-length:min
// 说明:参数长度最小为min(长度参数为整形),注意中文一个汉字占3字节
func vMinLength() {
    rule := `min-length:6`
    if err := gvalid.Check("hello2", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}



// 参数长度最大为max
// max-length
// 格式: max-length:max
// 说明:参数长度最大为max(长度参数为整形),注意中文一个汉字占3字节
func vMaxLength() {
    rule := `max-length:6`
    if err := gvalid.Check("hello22", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}



// 参数大小为min到max
// between
// 格式: between:min,max
// 说明:参数大小为min到max(支持整形和浮点类型参数)
func vBetween() {
    rule := `between:1,5`
    if err := gvalid.Check("4", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}



// 参数大小最小为min
// min
// 格式: min:min
// 说明:参数大小最小为min(支持整形和浮点类型参数)
func vMin() {
    rule := `min:3`
    if err := gvalid.Check("4", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}



// 参数大小最大为max
// max
// 格式: max:max
// 说明:参数大小最大为max(支持整形和浮点类型参数)
func vMax() {
    rule := `max:3`
    if err := gvalid.Check("2", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}



// JSON格式校验
// json
// 格式: json
// 说明:判断数据格式为JSON
func vJSON() {
    rule := `json`
    if err := gvalid.Check(`{"name": "admin"}`, rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}



// integer
// 格式: integer
// 说明:整数
func vInteger() {
    rule := `integer`
    if err := gvalid.Check("a12341234123412", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


// float
// 格式: float
// 说明:浮点数
func vFloat() {
    rule := `float`
    if err := gvalid.Check("2323.11", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


// boolean
// 格式: boolean
// 说明:布尔值(1,true,on,yes为true | 0,false,off,no,""为false)
func vBoolean() {
    rule := `boolean`
    if err := gvalid.Check("false", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


// 参数值必需与field参数的值相同
// same
// 格式: same:field
// 说明:参数值必需与field参数的值相同
func vSame() {
    type User struct{
        Name string
        Password1 string
        Password2 string `valid:"password@same:Password1"`
    }

    var user = User{"admin", "111111", "222222"}

    if err := gvalid.CheckStruct(user, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}



// 参数值不能与field参数的值相同
// different
// 格式: different:field
// 说明:参数值不能与field参数的值相同
func vDifferent() {
    type User struct{
        Name string
        Password1 string
        Password2 string `valid:"password@different:Password1"`
    }

    var user = User{"admin", "111111", "111111"}

    if err := gvalid.CheckStruct(user, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


// in
// 格式: in:value1,value2,...
// 说明:参数值应该在value1,value2,...中(字符串匹配)
func vIn() {
    rule := `in:admin,superadmin`
    if err := gvalid.Check("superadmin", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


// not-in
// 格式: not-in:value1,value2,...
// 说明:参数值不应该在value1,value2,...中(字符串匹配)
func vNotIn() {
    rule := `not-in:admin,superadmin`
    if err := gvalid.Check("admin", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}



// 自定义正则匹配规则
// regex
// 格式: regex:pattern
// 说明:参数值应当满足正则匹配规则pattern
func vRegex() {
    rule := `regex:^\d{3}`
    if err := gvalid.Check("133", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}



// map验证 自定义错误提示
func vMap() {
    data := map[string]string{
        "username": "root",
        "password": "123Abc@",
    }

    rules := map[string]string{
        "username": "required",
        "password": "password3",
    }

    if err := gvalid.CheckMap(data, rules); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


// 自定义错误提示
func vMsg() {
    rule := `required|length:6,10`

    msgs := map[string]string{
        "required": "老铁,这个不能空啊!",
        "length": "兄得,范围在6-10哥字符",
    }

    if err := gvalid.Check("abc", rule, msgs); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343