This commit is contained in:
Mrx
2026-01-31 17:43:31 +08:00
parent 0091e01574
commit f48289b32b
13 changed files with 409 additions and 117 deletions

View File

@@ -78,10 +78,13 @@ func RegisterCustomValidators(validate *validator.Validate) {
// 非空字符串验证器(不能为空字符串或只包含空格)
validate.RegisterValidation("notEmpty", validateNotEmpty)
// 授权日期验证器
// 授权日期验证器(格式 YYYYMMDD-YYYYMMDD且范围必须包含今天
validate.RegisterValidation("auth_date", validateAuthDate)
validate.RegisterValidation("validAuthDate", validateAuthDate)
// 日期范围验证器(格式 YYYYMMDD-YYYYMMDD开始≤结束不要求包含今天
validate.RegisterValidation("validDateRange", validateDateRange)
// 授权书URL验证器
validate.RegisterValidation("authorization_url", validateAuthorizationURL)
@@ -312,6 +315,32 @@ func validateAuthDate(fl validator.FieldLevel) bool {
return !startDate.After(today) && !endDate.Before(today)
}
// validateDateRange 日期范围验证器
// 格式YYYYMMDD-YYYYMMDD开始日期不能晚于结束日期不要求范围包含今天
func validateDateRange(fl validator.FieldLevel) bool {
s := fl.Field().String()
if s == "" {
return true
}
parts := strings.Split(s, "-")
if len(parts) != 2 {
return false
}
startStr, endStr := parts[0], parts[1]
if len(startStr) != 8 || len(endStr) != 8 {
return false
}
startDate, err := parseYYYYMMDD(startStr)
if err != nil {
return false
}
endDate, err := parseYYYYMMDD(endStr)
if err != nil {
return false
}
return !startDate.After(endDate)
}
// parseYYYYMMDD 解析YYYYMMDD格式的日期字符串
func parseYYYYMMDD(dateStr string) (time.Time, error) {
if len(dateStr) != 8 {

View File

@@ -9,7 +9,7 @@ import (
func RegisterCustomTranslations(validate *validator.Validate, trans ut.Translator) {
// 注册标准字段翻译
registerStandardTranslations(validate, trans)
// 注册自定义字段翻译
registerCustomFieldTranslations(validate, trans)
}
@@ -194,7 +194,7 @@ func registerCustomFieldTranslations(validate *validator.Validate, trans ut.Tran
t, _ := ut.T("auth_date", getFieldDisplayName(fe.Field()))
return t
})
validate.RegisterTranslation("validAuthDate", trans, func(ut ut.Translator) error {
return ut.Add("validAuthDate", "{0}格式不正确必须是YYYYMMDD-YYYYMMDD格式且日期范围必须包括今天", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
@@ -202,6 +202,13 @@ func registerCustomFieldTranslations(validate *validator.Validate, trans ut.Tran
return t
})
validate.RegisterTranslation("validDateRange", trans, func(ut ut.Translator) error {
return ut.Add("validDateRange", "{0}格式不正确必须是YYYYMMDD-YYYYMMDD格式且开始日期不能晚于结束日期", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("validDateRange", getFieldDisplayName(fe.Field()))
return t
})
// 时间范围翻译
validate.RegisterTranslation("validTimeRange", trans, func(ut ut.Translator) error {
return ut.Add("validTimeRange", "{0}格式不正确必须是HH:MM-HH:MM格式", true)
@@ -305,7 +312,7 @@ func registerCustomFieldTranslations(validate *validator.Validate, trans ut.Tran
t, _ := ut.T("validEnterpriseName", getFieldDisplayName(fe.Field()))
return t
})
validate.RegisterTranslation("enterprise_name", trans, func(ut ut.Translator) error {
return ut.Add("enterprise_name", "{0}格式不正确必须包含至少一个汉字长度2-100字符", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
@@ -410,4 +417,4 @@ func getFieldDisplayName(field string) string {
return displayName
}
return field
}
}