1、自定义验证器
//引入依赖
import "regexp"
import "github.com/go-playground/validator/v10"
//定义Reqsuest的参数定义
type validateCodeReq struct {
Phone string `json:"phone" validate:"required,phone"`
}
//定义手机号验证的正则表达式
var phoneRegex = regexp.MustCompile(`^1[3-9]\d{9}$`)
/**
* 类初始化函数
* 1 注册自定义验证器
**/
var validate = validator.New()
func init(){
validate.RegisterValidation("phone",func(fl validator.FieldLevel) bool {
phone := fl.Field().String()
return phoneRegex.MatchString(phone)
})
}
/**
* 验证码的handler
**/
func ValidateCodeHandler(w http.ResponseWriter,r *http.Request) {
w.Header().Set("Content-Type","application/json;charset=utf-8")
//读取请求体
body,err := io.ReadAll(r.Body)
if err != nil {
http.Error(w,"读取请求体失败",http.StatusBadRequest)
return
}
defer r.Body.Close()
//解析请求参数
var req validateCodeReq
if err := json.Unmarshal(body,&req);err != nil {
http.Error(w,"Json解析失败",http.StatusBadRequest)
return
}
//验证手机号
if err := validate.Struct(req);err != nil {
w.WriteHeader(http.StatusBadRequest)
json.NewEncoder(w).Encode(api.Result_NO{
Status: 0,
ErrorInfo: "手机号格式不正确",
})
return
}
.......
if err := json.NewEncoder(w).Encode(result); err != nil {
http.Error(w,err.Error(),http.StatusInternalServerError)
return;
}
}