52 lines
1.4 KiB
Go
52 lines
1.4 KiB
Go
package xhttp
|
|
|
|
import (
|
|
"net/http"
|
|
"reflect"
|
|
"regexp"
|
|
|
|
"github.com/go-playground/locales/en"
|
|
"github.com/go-playground/locales/zh"
|
|
ut "github.com/go-playground/universal-translator"
|
|
"github.com/go-playground/validator/v10"
|
|
zhTranslations "github.com/go-playground/validator/v10/translations/zh"
|
|
)
|
|
|
|
var mobileMatcher = regexp.MustCompile(`^1(3\d|4[5-9]|5[0-35-9]|6[567]|7[0-8]|8\d|9[0-35-9])\d{8}$`)
|
|
|
|
var translator ut.Translator
|
|
|
|
type Validator struct {
|
|
v *validator.Validate
|
|
}
|
|
|
|
func NewValidator() *Validator {
|
|
validate := validator.New()
|
|
uni := ut.New(en.New(), zh.New(), en.New())
|
|
translator, _ = uni.GetTranslator("zh")
|
|
_ = zhTranslations.RegisterDefaultTranslations(validate, translator)
|
|
|
|
validate.RegisterTagNameFunc(func(fld reflect.StructField) string {
|
|
return fld.Tag.Get("comment")
|
|
})
|
|
|
|
_ = validate.RegisterValidation("mobile", validateMobile)
|
|
_ = validate.RegisterTranslation("mobile", translator, func(ut ut.Translator) error {
|
|
return ut.Add("mobile", "{0}必须是一个有效的手机号", true)
|
|
}, func(ut ut.Translator, fe validator.FieldError) string {
|
|
t, _ := ut.T("mobile", fe.Field())
|
|
return t
|
|
})
|
|
return &Validator{
|
|
v: validate,
|
|
}
|
|
}
|
|
|
|
func (v *Validator) Validate(r *http.Request, data any) error {
|
|
return v.v.Struct(data)
|
|
}
|
|
|
|
func validateMobile(fl validator.FieldLevel) bool {
|
|
return mobileMatcher.MatchString(fl.Field().String())
|
|
}
|