1 Star 0 Fork 0

jason-laf/common

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
validator.go 2.38 KB
一键复制 编辑 原始数据 按行查看 历史
jason-laf 提交于 2024-03-08 16:22 +08:00 . u
package validator
import (
"reflect"
"regexp"
"strings"
"go.uber.org/zap"
"github.com/gin-gonic/gin/binding"
"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"
en_translations "github.com/go-playground/validator/v10/translations/en" // 英文
zh_translations "github.com/go-playground/validator/v10/translations/zh" // 中文
"gitee.com/jason-laf/common/global"
)
func Init() {
v, ok := binding.Validator.Engine().(*validator.Validate)
if !ok {
zap.S().Panicf("初始化validator失败")
}
// 注册一个获取json字段的自定义方法
v.RegisterTagNameFunc(func(fld reflect.StructField) string {
name := strings.SplitN(fld.Tag.Get("json"), ",", 2)[0]
if name == "-" {
return ""
}
return name
})
// 定义翻译器并注册
zh := zh.New()
en := en.New()
uni := ut.New(en, zh, en) // 第一个参数是备用的语言环境,后面的是应该支持的语言环境
global.Trans, ok = uni.GetTranslator(global.Local)
if !ok {
zap.S().Panicf("uni.GetTranslator false")
}
switch global.Local {
case "zh":
if err := zh_translations.RegisterDefaultTranslations(v, global.Trans); err != nil {
zap.S().Panicf("注册翻译器失败: %s", err)
}
case "en":
if err := en_translations.RegisterDefaultTranslations(v, global.Trans); err != nil {
zap.S().Panicf("注册翻译器失败: %s", err)
}
default:
if err := en_translations.RegisterDefaultTranslations(v, global.Trans); err != nil {
zap.S().Panicf("注册翻译器失败: %s", err)
}
}
// 将自定义的mobile字段和验证函数注册到validation中
err := v.RegisterValidation("mobile", func(fl validator.FieldLevel) bool {
mobile := fl.Field().String()
// 使用正则表达式判断是否合法
ok, _ := regexp.MatchString(
`^1([38][0-9]|14[579]|5[^4]|16[6]|7[1-35-8]|9[189])\d{8}$`,
mobile,
) // 使用反引号解决转义字符"\"的问题
return ok
})
if err != nil {
zap.S().Panicf("注册翻译器失败: %s", err)
}
// 自定义的mobile字段需要设置翻译返回
v.RegisterTranslation("mobile", global.Trans, func(ut ut.Translator) error {
return ut.Add("mobile", "{0}必须是合法的!", true) // see universal-translator for details
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("mobile", fe.Field())
return t
})
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/jason-laf/common.git
git@gitee.com:jason-laf/common.git
jason-laf
common
common
86f108f6c1c8

搜索帮助