package helper import ( "errors" "regexp" "strconv" "strings" ) /** * 验证 * 2020/08/10 */ type Validate struct { Data []interface{} Title []string Rule []string //多个规则使用逗号(,)隔开 } func (v *Validate) Check() error { if len(v.Data) == 0 { return nil } if len(v.Data) != len(v.Title) || len(v.Data) != len(v.Rule) { return errors.New("验证参数不对应") } msg := make([]string, 0) var ok bool for key, data := range v.Data { rules := strings.Split(v.Rule[key], ",") //分隔所有规则 for _, rule := range rules { switch rule { case "require": ok = require(data) if !ok { msg = append(msg, StringJoin(v.Title[key], "不能为空")) } } } } if len(msg) == 0 { return nil } return errors.New(strings.Join(msg, ",")) } func require(data interface{}) bool { if ToString(data) == "" { return false } return true } // 判断手机号码 func IsMobile(mobile string) bool { result, _ := regexp.MatchString(`^(1[3|4|5|6|7|8]\d{9})$`, mobile) if result { return true } else { return false } } // 判断邮箱 func IsEmail(email string) bool { pattern := `\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*` //匹配电子邮箱 reg := regexp.MustCompile(pattern) return reg.MatchString(email) } func ValidateIds(s string) bool { if s == "" { return false } parts := strings.Split(s, ",") for _, part := range parts { part = strings.TrimSpace(part) if part == "" { return false // 不允许空段(如 "123,,456") } id, err := strconv.Atoi(part) if err != nil || id < 0 { return false // 非数字或负数均视为无效 } } return true }