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

// 必需參數(shù)
// 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,...
// 說明:必需參數(shù)(當任意所給定字段值與所給值相等時,即:當field字段的值為value時,當前驗證字段為必須參數(shù))
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,...
// 說明:必需參數(shù)(當所給定字段值與所給值都不相等時壳嚎,即:當field字段的值不為value時框舔,當前驗證字段為必須參數(shù))
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,...
// 說明:必需參數(shù)(當所給定任意字段值不為空時)
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,...
// 說明:必須參數(shù)(當所給定所有字段值都不為空時)
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,...
// 說明:必需參數(shù)(當所給定任意字段值為空時)
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,...
// 說明:必須參數(shù)(當所給定所有字段值都為空時)
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
// 說明:參數(shù)為常用日期類型,日期之間支持的連接符號-或/或.啊片,也支持不帶連接符號的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())
    }
}


// 國內(nèi)座機電話號碼
// telephone
// 格式: telephone
// 說明:國內(nèi)座機電話號碼,"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())
    }
}


// 通用帳號規(guī)則
// passport
// 格式: passport
// 說明:通用帳號規(guī)則(字母開頭,只能包含字母瞒窒、數(shù)字和下劃線捺僻,長度在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
// 說明:中等強度密碼(在弱密碼的基礎(chǔ)上,必須包含大小寫字母和數(shù)字)
func vPassword2() {
    rule := `password2`
    if err := gvalid.Check("123Abc", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


// 強等強度密碼
// password3
// 格式: password3
// 說明:強等強度密碼(在弱密碼的基礎(chǔ)上匕坯,必須包含大小寫字母束昵、數(shù)字和特殊字符)
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())
    }
}


// 參數(shù)長度為min到max
// length
// 格式: length:min,max
// 說明:參數(shù)長度為min到max(長度參數(shù)為整形),注意中文一個漢字占3字節(jié)
func vLength() {
    rule := `length:6,10`
    if err := gvalid.Check("hello", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}



// 參數(shù)長度最小為min
// min-length
// 格式: min-length:min
// 說明:參數(shù)長度最小為min(長度參數(shù)為整形)醒颖,注意中文一個漢字占3字節(jié)
func vMinLength() {
    rule := `min-length:6`
    if err := gvalid.Check("hello2", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}



// 參數(shù)長度最大為max
// max-length
// 格式: max-length:max
// 說明:參數(shù)長度最大為max(長度參數(shù)為整形)妻怎,注意中文一個漢字占3字節(jié)
func vMaxLength() {
    rule := `max-length:6`
    if err := gvalid.Check("hello22", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}



// 參數(shù)大小為min到max
// between
// 格式: between:min,max
// 說明:參數(shù)大小為min到max(支持整形和浮點類型參數(shù))
func vBetween() {
    rule := `between:1,5`
    if err := gvalid.Check("4", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}



// 參數(shù)大小最小為min
// min
// 格式: min:min
// 說明:參數(shù)大小最小為min(支持整形和浮點類型參數(shù))
func vMin() {
    rule := `min:3`
    if err := gvalid.Check("4", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}



// 參數(shù)大小最大為max
// max
// 格式: max:max
// 說明:參數(shù)大小最大為max(支持整形和浮點類型參數(shù))
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
// 說明:判斷數(shù)據(jù)格式為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
// 說明:整數(shù)
func vInteger() {
    rule := `integer`
    if err := gvalid.Check("a12341234123412", rule, nil); err != nil {
        fmt.Println(err.Maps())
        fmt.Println(err.Strings())
    }
}


// float
// 格式: float
// 說明:浮點數(shù)
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())
    }
}


// 參數(shù)值必需與field參數(shù)的值相同
// same
// 格式: same:field
// 說明:參數(shù)值必需與field參數(shù)的值相同
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())
    }
}



// 參數(shù)值不能與field參數(shù)的值相同
// different
// 格式: different:field
// 說明:參數(shù)值不能與field參數(shù)的值相同
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,...
// 說明:參數(shù)值應該在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,...
// 說明:參數(shù)值不應該在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())
    }
}



// 自定義正則匹配規(guī)則
// regex
// 格式: regex:pattern
// 說明:參數(shù)值應當滿足正則匹配規(guī)則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())
    }
}


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末腰耙,一起剝皮案震驚了整個濱河市榛丢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挺庞,老刑警劉巖晰赞,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異选侨,居然都是意外死亡掖鱼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門援制,熙熙樓的掌柜王于貴愁眉苦臉地迎上來戏挡,“玉大人,你說我怎么就攤上這事晨仑『质” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵洪己,是天一觀的道長妥凳。 經(jīng)常有香客問我,道長答捕,這世上最難降的妖魔是什么逝钥? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮拱镐,結(jié)果婚禮上晌缘,老公的妹妹穿的比我還像新娘。我一直安慰自己痢站,他們只是感情好磷箕,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著阵难,像睡著了一般岳枷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天空繁,我揣著相機與錄音殿衰,去河邊找鬼。 笑死盛泡,一個胖子當著我的面吹牛闷祥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播傲诵,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼凯砍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拴竹?” 一聲冷哼從身側(cè)響起悟衩,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎栓拜,沒想到半個月后座泳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡幕与,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年挑势,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啦鸣。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡潮饱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赏陵,到底是詐尸還是另有隱情饼齿,我是刑警寧澤饲漾,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布蝙搔,位于F島的核電站,受9級特大地震影響考传,放射性物質(zhì)發(fā)生泄漏吃型。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一僚楞、第九天 我趴在偏房一處隱蔽的房頂上張望勤晚。 院中可真熱鬧,春花似錦泉褐、人聲如沸赐写。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挺邀。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間端铛,已是汗流浹背泣矛。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留禾蚕,地道東北人您朽。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像换淆,于是被迫代替她去往敵國和親哗总。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354