Files
hospital-admin-api/core/validator.go
T
2023-06-08 09:32:22 +08:00

96 lines
3.4 KiB
Go

package core
import (
"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"
"hospital-admin-api/global"
"hospital-admin-api/utils"
"reflect"
)
// Validator 验证器
func Validator() {
chzh := zh.New()
uni := ut.New(chzh, chzh)
global.Trans, _ = uni.GetTranslator("zh")
global.Validate = validator.New()
// 通过label标签返回自定义错误内容
global.Validate.RegisterTagNameFunc(func(field reflect.StructField) string {
label := field.Tag.Get("label")
if label == "" {
return field.Name
}
return label
})
_ = zhTranslations.RegisterDefaultTranslations(global.Validate, global.Trans)
// 注册自定义函数和标签
// 手机号验证
_ = global.Validate.RegisterValidation("Mobile", mobile) // 注册自定义函数,前一个参数是struct里tag自定义,后一个参数是自定义的函数
// 自定义required错误内容
_ = global.Validate.RegisterTranslation("required", global.Trans, func(ut ut.Translator) error {
return ut.Add("required", "{0}为必填字段!", false) // see universal-translator for details
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("required", fe.Field())
return t
})
// 自定义max错误内容
_ = global.Validate.RegisterTranslation("max", global.Trans, func(ut ut.Translator) error {
return ut.Add("max", "{0}超出最大长度", false) // see universal-translator for details
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("max", fe.Field())
return t
})
// 自定义min错误内容
_ = global.Validate.RegisterTranslation("min", global.Trans, func(ut ut.Translator) error {
return ut.Add("min", "{0}超出最小长度", false) // see universal-translator for details
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("min", fe.Field())
return t
})
// 自定义lt错误内容
_ = global.Validate.RegisterTranslation("lt", global.Trans, func(ut ut.Translator) error {
return ut.Add("lt", "{0}超出最大值", false) // see universal-translator for details
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("lt", fe.Field())
return t
})
// 自定义min错误内容
_ = global.Validate.RegisterTranslation("gt", global.Trans, func(ut ut.Translator) error {
return ut.Add("gt", "{0}不满足最小值", false) // see universal-translator for details
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("gt", fe.Field())
return t
})
// 自定义email错误内容
_ = global.Validate.RegisterTranslation("email", global.Trans, func(ut ut.Translator) error {
return ut.Add("email", "{0}邮件格式错误", false) // see universal-translator for details
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("email", fe.Field())
return t
})
// 自定义mobile错误内容
_ = global.Validate.RegisterTranslation("Mobile", global.Trans, func(ut ut.Translator) error {
return ut.Add("mobile", "手机号格式错误", false) // see universal-translator for details
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("mobile", fe.Field())
return t
})
}
// 自定义手机号验证
func mobile(fl validator.FieldLevel) bool {
return utils.RegexpMobile(fl.Field().String())
}