gin表單驗(yàn)證顯示中文
概述
使用反射發(fā)的方式
簡(jiǎn)單使用
package main
import (
"fmt"
"gopkg.in/go-playground/validator.v9"
)
// 安裝 go get gopkg.in/go-playground/validator.v9
type InputLogin struct {
Email string `validate:"required,email"`
Password string `validate:"required,max=16,min=6"`
Code int `validate:"gte=1000,lte=9999"`
}
func main() {
v := validator.New()
input := &InputLogin{
Email: "jet@23.com",
Password: "123456",
Code: 4444,
}
err := v.Struct(input)
if err != nil {
for _, err := range err.(validator.ValidationErrors) {
fmt.Println(err)
}
return
}
fmt.Println("ok")
}
- 提示消息英文
- 提示消息是固定的
翻譯
package main
import (
"fmt"
"reflect"
"github.com/go-playground/locales/zh"
ut "github.com/go-playground/universal-translator"
"gopkg.in/go-playground/validator.v9"
zhTranslations "gopkg.in/go-playground/validator.v9/translations/zh"
)
// 安裝 go get gopkg.in/go-playground/validator.v9
type InputLogin struct {
Email string `json:"email" validate:"required,email" label:"郵箱"`
Password string `json:"password" validate:"required,max=16,min=6" label:"密碼"`
Code int `json:"code" validate:"gte=1000,lte=9999" label:"驗(yàn)證碼"`
C1 string `json:"c1" validate:"checkName" label:"測(cè)試字段"`
}
func checkName(fl validator.FieldLevel) bool {
val := fl.Field().String()
l1 := fl.GetTag()
fmt.Println(l1)
l2 := fl.Param()
fmt.Println(l2)
fmt.Println("----->", val)
//如果是張三就會(huì)觸發(fā)驗(yàn)證
return val != "張三"
}
func main() {
input := &InputLogin{
Email: "jet@dsd.com",
Password: "12356",
Code: 444411,
C1: "張三",
}
//中文翻譯器
zh_ch := zh.New()
uni := ut.New(zh_ch)
trans, _ := uni.GetTranslator("zh")
v := validator.New()
//注冊(cè)自定義驗(yàn)證函數(shù)
v.RegisterValidation("checkName", checkName)
//注冊(cè)翻譯器
zhTranslations.RegisterDefaultTranslations(v, trans)
// 自定義錯(cuò)誤信息
v.RegisterTranslation("checkName", trans, func(ut ut.Translator) error {
return ut.Add("checkName", "{0}字段名稱不能叫張三!", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("checkName", fe.Field())
return t
})
v.RegisterTagNameFunc(func(field reflect.StructField) string {
fmt.Println("----->", field.Name)
//通過反射取出label
label := field.Tag.Get("label")
//fmt.Sprint
return fmt.Sprint(field.Name, ",", label)
})
err := v.Struct(input)
if err != nil {
for _, err := range err.(validator.ValidationErrors) {
//翻譯輸出
m := err.Translate(trans)
fmt.Println(m)
}
return
}
fmt.Println("ok")
}
打印結(jié)果為
Password,密碼長(zhǎng)度必須至少為6個(gè)字符
Code,驗(yàn)證碼必須小于或等于9,999
C1,測(cè)試字段字段名稱不能叫張三!
浙公網(wǎng)安備 33010602011771號(hào)