2017-07-26 49 views
0

使用github.com/go-validator/validator驗證正則表達式某些電話號碼時,使用此前綴+62,62,0(例如實例編號)可能會遇到一些麻煩。 + 628112blabla,0822blablabla,628796blablabla。正則表達式電話號碼使用驗證V2 Golang包不起作用

我在online regex tester上試過我的正則表達式,並且沒有任何關於正則表達式的問題。這裏的正則表達式是:

(0|\+62|062|62)[0-9]+$ 

但是,當我嘗試用我的去執行它,正則表達式不工作。這是我的代碼實現的目的:

type ParamRequest struct { 
    PhoneNumber string `validate:"nonzero,regexp=(0|\+62|062|62)[0-9]+$"` 
    ItemCode string `validate:"nonzero"` 
    CallbackUrl string `validate:"nonzero"` 
} 

func (c *TopupAlloperatorApiController) Post() { 
    var v models.TopupAlloperatorApi 

    interf := make(map[string]interface{}) 

    json.Unmarshal(c.Ctx.Input.RequestBody, &interf) 

    logs.Debug(" Json Input Request ", interf) 
    var phone, item, callback string 

    if _, a := interf["PhoneNumber"].(string); a { 
     phone = interf["PhoneNumber"].(string) 
    } 
    if _, b := interf["ItemCode"].(string); b { 
     item = interf["ItemCode"].(string) 
    } 

    if _, c := interf["CallbackUrl"].(string); c { 
     callback = interf["CallbackUrl"].(string) 
    } 

    ve := ParamRequest{ 
     PhoneNumber: phone, 
     ItemCode: item, 
     CallbackUrl: callback, 
    } 

    logs.Debug(" Param Request ", ve) 



    err := validator.Validate(ve) 
    if err == nil { 
     //success 
    }else{ 
     // not success 
    } 

非常感謝任何幫助。謝謝。

+0

我相信你真的想使用'^'在字符串的開始錨比賽,太:'^( 0 | \ 62 | 062 | 62)[0-9] + $'。你的意思是什麼不起作用? –

+0

我試過用^了,但還是一樣的。我有第一次使用^,直到我在線測試人員鏈接驗證我的正則表達式。我的golang代碼無法正常工作。這就像跳過所有的驗證,但如果我刪除正則表達式驗證,所有驗證(非零驗證)正常工作。 –

回答

0

因爲您正在使用正則表達式來檢查PhoneNumber,如果該值爲空則不匹配,所以最好從驗證中刪除nonzero
我已經簽出文檔,並沒有找到您可以同時使用的示例:nonzeroregexp
此外,你需要讓你的正則表達式符號轉義,否則它不會被反射檢測到。這意味着你應該在你的代碼中使用(0|\\+62|062|62)[0-9]+$。下面是例子,其中的問題是:symbol escaping in struct tags
並且還,請嘗試使用這個正則表達式:^\\+{0,1}0{0,1}62[0-9]+$

+0

很好..謝謝。現在正在工作。這完全是關於結構標籤中的符號轉義。我正在使用'(0 | \\ + 62 | 062 | 62)[0-9] + $',並且也使用非零值驗證。 '型ParamRequest結構{ \t ******中國串'驗證: 「非零,正則表達式= ^(0 | \\ + 62 | 062 | 62)[0-9] + $」' \t ItemCode串'驗證:「非零「' }' 謝謝 –

相關問題