GO—自定义验证器

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;
	}
}