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 }