Regex 使用验证V2 Golang软件包的正则表达式电话号码不起作用

Regex 使用验证V2 Golang软件包的正则表达式电话号码不起作用,regex,go,Regex,Go,我在使用github.com/go validator/validator验证带有此前缀+62,62,0的regex某些电话号码时遇到一些问题,例如+628112blabla、0822blablabla、628796blabla 我已经试过我的正则表达式了,在这方面没有任何问题。这里的正则表达式是: (0|\+62|062|62)[0-9]+$ 但是当我尝试使用go工具时,正则表达式不起作用。这是我的代码,用于实现以下目的: type ParamRequest struct { Pho

我在使用
github.com/go validator/validator
验证带有此前缀+62,62,0的regex某些电话号码时遇到一些问题,例如+628112blabla、0822blablabla、628796blabla

我已经试过我的正则表达式了,在这方面没有任何问题。这里的正则表达式是:

(0|\+62|062|62)[0-9]+$
但是当我尝试使用go工具时,正则表达式不起作用。这是我的代码,用于实现以下目的:

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
    }

非常感谢您的帮助。谢谢。

因为您正在使用regexp检查
电话号码
,如果该值为空,则该号码将不匹配。最好从验证中删除
非零。
我已经查阅了文档,还没有找到可以同时使用的示例:
nonzero
regexp

您还需要转义您的正则表达式符号,否则它将不会被反射检测到。这意味着您应该在代码中使用
(0-9]+$
。下面是问题所在的示例:

另外,请尝试使用此regexp:
^\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
我已经查阅了文档,还没有找到可以同时使用的示例:
nonzero
regexp

您还需要转义您的正则表达式符号,否则它将不会被反射检测到。这意味着您应该在代码中使用
(0-9]+$
。下面是问题所在的示例:

另外,请尝试使用这个regexp:
^\\+{0,1}0{0,1}62[0-9]+$

我相信您实际上也希望使用
^
在字符串的开头锚定匹配:
^(0-9]+$
。你说它不起作用是什么意思?我也尝试过使用^。我第一次使用^,直到我获得验证我的正则表达式的在线测试仪链接。我的golang代码不能正常工作。这就像跳过所有验证,但是如果我删除正则表达式验证,所有验证(非零验证)都会正常工作。我相信您实际上也希望使用
^
在字符串开头锚定匹配:
^(0 |\+62 | 062 | 62)[0-9]+$
。你说它不起作用是什么意思?我也尝试过使用^。我第一次使用^,直到我获得验证我的正则表达式的在线测试仪链接。我的golang代码不能正常工作。这就像跳过所有验证,但是如果我删除正则表达式验证,所有验证(非零验证)都会正常工作。太好了。。谢谢它正在工作。这都是关于结构标记中的符号转义。我使用的是
(0 |\\+62 | 062 | 62)[0-9]+$
,也使用非零验证<代码>键入ParamRequest结构{PhoneNumber string
验证:“非零,regexp=^(0-9]+$”`ItemCode string
验证:“非零”
}`ThanksGreat。。谢谢它正在工作。这都是关于结构标记中的符号转义。我使用的是
(0 |\\+62 | 062 | 62)[0-9]+$
,也使用非零验证<代码>键入ParamRequest结构{PhoneNumber string
验证:“非零,regexp=^(0-9]+$”`ItemCode string
验证:“非零”
}`谢谢