package validate import ( "reflect" "regexp" "strings" "github.com/gin-gonic/gin/binding" "github.com/go-playground/locales/zh" ut "github.com/go-playground/universal-translator" "github.com/go-playground/validator/v10" zh_translations "github.com/go-playground/validator/v10/translations/zh" ) var ( Uni *ut.UniversalTranslator Validate *validator.Validate Trans ut.Translator ) func Setup() { zh := zh.New() Uni = ut.New(zh, zh) Trans, _ = Uni.GetTranslator("zh") // use origin // Validate = validator.New() // use gin built in Validate, _ = binding.Validator.Engine().(*validator.Validate) zh_translations.RegisterDefaultTranslations(Validate, Trans) Validate.RegisterTagNameFunc(func(fld reflect.StructField) string { name := fld.Tag.Get("label") return name }) Validate.RegisterValidation("checkMobile", checkMobile) // customer error Validate.RegisterTranslation("checkMobile", Trans, func(ut ut.Translator) error { return ut.Add("checkMobile", "{0}格式错误!", true) }, func(ut ut.Translator, fe validator.FieldError) string { t, _ := ut.T("checkMobile", fe.Field()) return t }) } func Translate(errs validator.ValidationErrors) string { var errList []string for _, e := range errs { errList = append(errList, e.Translate(Trans)) } return strings.Join(errList, "|") } func checkMobile(fl validator.FieldLevel) bool { mobile := fl.Field().String() regular := "^(1)\\d{10}$" r := regexp.MustCompile(regular) return r.MatchString(mobile) }