簡體   English   中英

如何使用 go-playground/validator 編寫 snake case 綁定標簽?

[英]How to compose snake case binding tag with go-playground/validator?

作為標題,由於我是 golang 的新手,我對某些自定義格式的綁定標簽有點困惑。

例如,有一個結構體包含一些這樣的字段

type user struct {
   name  `json:"name" binding:"required"`
   hobby `json:"name" binding:"required"`
}

並且 name 字段應該只支持小寫和下划線(例如 john_cage,david),但是在我閱讀了 validator 的文檔之后,仍然對此一無所知。 validator github對我的情況有什么好的建議或解決方案嗎? 提前致謝。

閱讀文檔,谷歌類似問題,嘗試編寫客戶綁定標簽等。

binding標簽來自ginvalidator的正確結構標簽是validate 由於沒有 snake_case 的驗證,您應該自己制作。 並且不要忘記導出字段( HobbyName )。 如果不是,(例如: hobbyname )驗證器將忽略這些字段。

package main

import (
    "fmt"
    "strings"

    "github.com/go-playground/validator/v10"
)

type user struct {
    Hobby string `json:"name" validate:"required,snakecase"`
}

func main() {
    v := validator.New()
    _ = v.RegisterValidation("snakecase", validateSnakeCase)

    correct := user{"playing_game"}
    Incorrect := user{"playingGame"}

    err := v.Struct(correct)
    fmt.Println(err) // nil

    err = v.Struct(Incorrect)
    fmt.Println(err) // error
}

const allows = "abcdefghijklmnopqrstuvwxyz_"

func validateSnakeCase(fl validator.FieldLevel) bool {
    str := fl.Field().String()
    for i := range str {
        if !strings.Contains(allows, str[i:i+1]) {
            return false
        }
    }

    return true
}

操場

如果你想通過gin注冊 function ,檢查這個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM