首页 > 其他分享 >自定义手机号码验证器

自定义手机号码验证器

时间:2023-02-19 21:24:48浏览次数:41  
标签:自定义 验证 mobile ut binding validator 手机号码

因为validator官方没有提供验证手机号码的逻辑,所以得自己定义

 

1.编写验证函数

// ValidateMobile
// 验证手机号码是否正确
func ValidateMobile(f1 validator.FieldLevel) bool {
mobile := f1.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
}

2.配合gin的binding注册validator
//注册自定义的验证手机号码验证器
if v, ok := binding.Validator.Engine().(*validator.Validate); ok {
//注册验证函数,只需在结构体的binding标签使用mobile就行
_ = v.RegisterValidation("mobile", myvalidator.ValidateMobile)
//自己定义的验证器没有中文翻译,官方的解决方案 "mobile": "Key: 'PassWordLoginForm.mobile' Error:Field validation for 'mobile' failed on the 'mobile' tag"
_ = v.RegisterTranslation("mobile", global.Trans, 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
})
}

3.定义接受验证数据的结构体,需要用注册验证器的指定标签使用 例如上述注册的“mobile”
type PassWordLoginForm struct {
//用于接收表单的登陆参数
Mobile string `form:"mobile" json:"mobile" binding:"required,mobile"` //validator没有定义手机号验证。所以得自己定义一个号码验证
PassWord string `form:"password" json:"password" binding:"required,min=3,max=10"`
}

标签:自定义,验证,mobile,ut,binding,validator,手机号码
From: https://www.cnblogs.com/lunar-huazai/p/17135613.html

相关文章