1
resposta

Validate Regex

Olá, tudo bem? Estou tentando usar o validatror v2 ("gopkg.in/validator.v2") para validar, em regex, uma url no struct:

type Video struct {
    gorm.Model
    Titulo    string `json:"titulo" validate:"min=3,max=80"`
    Descricao string `json:"descricao" validate:"min=3,max=160"`
    Url       string `json:"url" validate:"regexp=^(https?:\/\/(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9])(:?\d*)\/?([a-z_\/0-9\-#.]*)\??([a-z_\/0-9\-#=&]*)?$"`
    Categoria string `json:"categoria" validate:"min=3,max=20"`
}

Porém, o Url fica com uma anotação em amarelo embaixo da palavra, com a seguinte mensagem: "struct field tag json:"url" validate:"regexp=^(https?:\/\/(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9])(:?\d*)\/?([a-z_\/0-9\-#.]*)\??([a-z_\/0-9\-#=&]*)?$" not compatible with reflect.StructTag.Get: bad syntax for struct tag valuestructtag"

De fato, quando eu rodo o código e tento fazer um post, a validação da URL não funciona mesmo. Qual o jeito certo de validar a url? Quando eu testo o regex no site regex101 está funcionando...

Obrigada!

1 resposta

Olá Ana, tudo bem?

Acredito que o scape dos caracteres esteja errado, tenta colocar duas barras \\, exemplo:

Url       string `json:"url" validate:"regexp=^(https?:\\/\\/(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9])(:?\\d*)\\/?([a-z_\\/0-9\\-#.]*)\\??([a-z_\\/0-9\\-#=&]*)?$"`