chore: init bj_power monorepo (dashboard/mes/wms/wms_client/workstation), clear subproject git metadata and align naming to folder names
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
package xhttp
|
||||
|
||||
import (
|
||||
"log/slog"
|
||||
"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")
|
||||
if err := zhTranslations.RegisterDefaultTranslations(validate, translator); err != nil {
|
||||
slog.Error("验证器: 注册默认翻译失败", "error", err)
|
||||
}
|
||||
|
||||
validate.RegisterTagNameFunc(func(fld reflect.StructField) string {
|
||||
return fld.Tag.Get("comment")
|
||||
})
|
||||
|
||||
if err := validate.RegisterValidation("mobile", validateMobile); err != nil {
|
||||
slog.Error("验证器: 注册mobile校验失败", "error", err)
|
||||
}
|
||||
if err := 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
|
||||
}); err != nil {
|
||||
slog.Error("验证器: 注册mobile翻译失败", "error", err)
|
||||
}
|
||||
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())
|
||||
}
|
||||
Reference in New Issue
Block a user