低空智控平台 后端go
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

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
}