You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.2 KiB
81 lines
2.2 KiB
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
|
|
}
|
|
|