hospital-open-api/core/validator.go
2023-08-31 17:32:45 +08:00

96 lines
3.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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-open-api/global"
"hospital-open-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())
}