Skip to content

Instantly share code, notes, and snippets.

@Siva-Karthi
Created June 29, 2021 14:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Siva-Karthi/9639e3640ed7fa97401314cbeac4d336 to your computer and use it in GitHub Desktop.
Save Siva-Karthi/9639e3640ed7fa97401314cbeac4d336 to your computer and use it in GitHub Desktop.
goValidatorErrorTranslation
package main
import (
"fmt"
"github.com/go-playground/locales/en"
ut "github.com/go-playground/universal-translator"
"github.com/go-playground/validator/v10"
en_translations "github.com/go-playground/validator/v10/translations/en"
"reflect"
"regexp"
"strings"
)
type Student struct {
Name string `json:"name" validate:"omitempty,noSplChars"`
}
func main() {
bob := &Student{
Name: "*^*(&^*&",
}
appValidator := validator.New()
_ = appValidator.RegisterValidation("noSplChars", validateNoSplChars)
appValidator.RegisterTagNameFunc(func(fld reflect.StructField) string {
name := strings.SplitN(fld.Tag.Get("json"), ",", 2)[0]
if name == "-" {
return ""
}
return name
})
err := appValidator.Struct(bob)
if err != nil{
validationErrors := err.(validator.ValidationErrors)
fmt.Println("validationErrors",validationErrors)
}
english := en.New()
uni := ut.New(english, english)
translator, _ := uni.GetTranslator("en")
_ = en_translations.RegisterDefaultTranslations(appValidator, translator)
errStartsWith := "Field - `{0}` should starts with alpha numeric"
addTranslation("should_start_with_alpha_numeric", errStartsWith, appValidator, &translator)
print("done")
}
func addTranslation(tag string, errMessage string, appValidator *validator.Validate, translator *ut.Translator) {
registerFn := func(ut ut.Translator) error {
return ut.Add(tag, errMessage, true)
}
transFn := func(ut ut.Translator, fe validator.FieldError) string {
param := fe.Param()
tag := fe.Tag()
t, err := ut.T(tag, fe.Field(), param)
if err != nil {
return fe.(error).Error()
}
return t
}
_ = appValidator.RegisterTranslation(tag, *translator, registerFn, transFn)
}
func validateNoSplChars(fl validator.FieldLevel) bool {
stringField := fl.Field().String()
regex, _ := regexp.Compile("[a-zA-Z0-9].*$")
result := regex.MatchString(stringField)
return result
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment