package common import ( "regexp" "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 ( phoneRegexp = regexp.MustCompile(`^1[3456789]\d{9}$`) emailRegexp = regexp.MustCompile(`^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`) ) // IsPhoneValid 验证手机号格式 func IsPhoneValid(fl validator.FieldLevel) bool { return phoneRegexp.MatchString(fl.Field().String()) } // IsEmailValid 验证邮箱格式 func IsEmailValid(fl validator.FieldLevel) bool { return emailRegexp.MatchString(fl.Field().String()) } func ValidatePassword(fl validator.FieldLevel) bool { password := fl.Field().String() if password == "" { return true } if len(password) < 8 || len(password) > 16 { return false } if !regexp.MustCompile(`[0-9]`).MatchString(password) || !regexp.MustCompile(`[a-zA-Z]`).MatchString(password) { return false } return true } var trans ut.Translator func init() { if v, ok := binding.Validator.Engine().(*validator.Validate); ok { v.RegisterValidation("password", ValidatePassword) v.RegisterValidation("email", IsEmailValid) v.RegisterValidation("phone", IsPhoneValid) zhCn := zh.New() uni := ut.New(zhCn, zhCn) trans, _ = uni.GetTranslator("zh") zh_translations.RegisterDefaultTranslations(v, trans) v.RegisterTranslation("password", trans, func(ut ut.Translator) error { return ut.Add("password", "{0}必须包含数字、字母,长度在8-16位之间", true) }, func(ut ut.Translator, fe validator.FieldError) string { t, _ := ut.T("password", fe.Field()) return t }) v.RegisterTranslation("phone", trans, func(ut ut.Translator) error { return ut.Add("phone", "{0}格式不正确", true) }, func(ut ut.Translator, fe validator.FieldError) string { t, _ := ut.T("phone", fe.Field()) return t }) v.RegisterTranslation("email", trans, func(ut ut.Translator) error { return ut.Add("email", "{0}格式不正确", true) }, func(ut ut.Translator, fe validator.FieldError) string { t, _ := ut.T("email", fe.Field()) return t }) } } func GetTrans() ut.Translator { return trans }