temp
This commit is contained in:
114
internal/shared/validator/custom_validators.go
Normal file
114
internal/shared/validator/custom_validators.go
Normal file
@@ -0,0 +1,114 @@
|
||||
package validator
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
"regexp"
|
||||
|
||||
"github.com/go-playground/validator/v10"
|
||||
)
|
||||
|
||||
// RegisterCustomValidators 注册所有自定义验证器
|
||||
func RegisterCustomValidators(validate *validator.Validate) {
|
||||
// 手机号验证器
|
||||
validate.RegisterValidation("phone", validatePhone)
|
||||
|
||||
// 用户名验证器(字母开头,允许字母数字下划线,3-20位)
|
||||
validate.RegisterValidation("username", validateUsername)
|
||||
|
||||
// 强密码验证器(至少8位,包含大小写字母和数字)
|
||||
validate.RegisterValidation("strong_password", validateStrongPassword)
|
||||
|
||||
// 统一社会信用代码验证器
|
||||
validate.RegisterValidation("social_credit_code", validateSocialCreditCode)
|
||||
|
||||
// 身份证号验证器
|
||||
validate.RegisterValidation("id_card", validateIDCard)
|
||||
|
||||
// 价格验证器(非负数)
|
||||
validate.RegisterValidation("price", validatePrice)
|
||||
|
||||
// 排序方向验证器
|
||||
validate.RegisterValidation("sort_order", validateSortOrder)
|
||||
|
||||
// 产品代码验证器(字母数字下划线连字符,3-50位)
|
||||
validate.RegisterValidation("product_code", validateProductCode)
|
||||
|
||||
// UUID验证器
|
||||
validate.RegisterValidation("uuid", validateUUID)
|
||||
|
||||
// URL验证器
|
||||
validate.RegisterValidation("url", validateURL)
|
||||
}
|
||||
|
||||
// validatePhone 手机号验证
|
||||
func validatePhone(fl validator.FieldLevel) bool {
|
||||
phone := fl.Field().String()
|
||||
matched, _ := regexp.MatchString(`^1[3-9]\d{9}$`, phone)
|
||||
return matched
|
||||
}
|
||||
|
||||
// validateUsername 用户名验证
|
||||
func validateUsername(fl validator.FieldLevel) bool {
|
||||
username := fl.Field().String()
|
||||
matched, _ := regexp.MatchString(`^[a-zA-Z][a-zA-Z0-9_]{2,19}$`, username)
|
||||
return matched
|
||||
}
|
||||
|
||||
// validateStrongPassword 强密码验证
|
||||
func validateStrongPassword(fl validator.FieldLevel) bool {
|
||||
password := fl.Field().String()
|
||||
if len(password) < 8 {
|
||||
return false
|
||||
}
|
||||
hasUpper := regexp.MustCompile(`[A-Z]`).MatchString(password)
|
||||
hasLower := regexp.MustCompile(`[a-z]`).MatchString(password)
|
||||
hasDigit := regexp.MustCompile(`\d`).MatchString(password)
|
||||
return hasUpper && hasLower && hasDigit
|
||||
}
|
||||
|
||||
// validateSocialCreditCode 统一社会信用代码验证
|
||||
func validateSocialCreditCode(fl validator.FieldLevel) bool {
|
||||
code := fl.Field().String()
|
||||
matched, _ := regexp.MatchString(`^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$`, code)
|
||||
return matched
|
||||
}
|
||||
|
||||
// validateIDCard 身份证号验证
|
||||
func validateIDCard(fl validator.FieldLevel) bool {
|
||||
idCard := fl.Field().String()
|
||||
matched, _ := regexp.MatchString(`^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[\dXx]$`, idCard)
|
||||
return matched
|
||||
}
|
||||
|
||||
// validatePrice 价格验证
|
||||
func validatePrice(fl validator.FieldLevel) bool {
|
||||
price := fl.Field().Float()
|
||||
return price >= 0
|
||||
}
|
||||
|
||||
// validateSortOrder 排序方向验证
|
||||
func validateSortOrder(fl validator.FieldLevel) bool {
|
||||
sortOrder := fl.Field().String()
|
||||
return sortOrder == "" || sortOrder == "asc" || sortOrder == "desc"
|
||||
}
|
||||
|
||||
// validateProductCode 产品代码验证
|
||||
func validateProductCode(fl validator.FieldLevel) bool {
|
||||
code := fl.Field().String()
|
||||
matched, _ := regexp.MatchString(`^[a-zA-Z0-9_-]{3,50}$`, code)
|
||||
return matched
|
||||
}
|
||||
|
||||
// validateUUID UUID验证
|
||||
func validateUUID(fl validator.FieldLevel) bool {
|
||||
uuid := fl.Field().String()
|
||||
matched, _ := regexp.MatchString(`^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`, uuid)
|
||||
return matched
|
||||
}
|
||||
|
||||
// validateURL URL验证
|
||||
func validateURL(fl validator.FieldLevel) bool {
|
||||
urlStr := fl.Field().String()
|
||||
_, err := url.ParseRequestURI(urlStr)
|
||||
return err == nil
|
||||
}
|
||||
Reference in New Issue
Block a user