Merge pull request '增加验证规则的枚举值' (#2) from feature/validator into master
Reviewed-on: #2
This commit is contained in:
		
							
								
								
									
										67
									
								
								data_type.go
									
									
									
									
									
								
							
							
						
						
									
										67
									
								
								data_type.go
									
									
									
									
									
								
							@ -194,3 +194,70 @@ func getDataTypeDesc(value DataType, description string) DataTypeDesc {
 | 
			
		||||
		Description: description,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	// DataTypeBaseNumber 基础的int类型
 | 
			
		||||
	DataTypeBaseNumber   = []DataType{DataTypeInt, DataTypeUint, DataTypeFloat, DataTypeIntPtr, DataTypeUintPtr, DataTypeFloatPtr}
 | 
			
		||||
	DataTypeBaseInt      = []DataType{DataTypeInt, DataTypeIntPtr}
 | 
			
		||||
	DataTypeBaseUint     = []DataType{DataTypeUint, DataTypeUintPtr}
 | 
			
		||||
	DataTypeBaseFloat    = []DataType{DataTypeFloat, DataTypeFloatPtr}
 | 
			
		||||
	DataTypeBaseString   = []DataType{DataTypeString, DataTypeStringPtr}
 | 
			
		||||
	DataTypeBaseBool     = []DataType{DataTypeBool, DataTypeBoolPtr}
 | 
			
		||||
	DataTypeSliceMarshal = []DataType{
 | 
			
		||||
		DataTypeSliceAnyWithMarshal,
 | 
			
		||||
		DataTypeSliceIntWithMarshal,
 | 
			
		||||
		DataTypeSliceUintWithMarshal,
 | 
			
		||||
		DataTypeSliceFloatWithMarshal,
 | 
			
		||||
		DataTypeSliceBoolWithMarshal,
 | 
			
		||||
		DataTypeSliceMapAnyAnyWithMarshal,
 | 
			
		||||
		DataTypeSliceMapStringAnyWithMarshal,
 | 
			
		||||
		DataTypeSliceAnyWithMarshal,
 | 
			
		||||
		DataTypeSliceSliceWithMarshal,
 | 
			
		||||
	}
 | 
			
		||||
	DataTypeSliceSplit = []DataType{
 | 
			
		||||
		DataTypeSliceIntWithChar,
 | 
			
		||||
		DataTypeSliceUintWithChar,
 | 
			
		||||
		DataTypeSliceFloatWithChar,
 | 
			
		||||
		DataTypeSliceBoolWithChar,
 | 
			
		||||
		DataTypeSliceStringWithChar,
 | 
			
		||||
	}
 | 
			
		||||
	DataTypeSlice = []DataType{
 | 
			
		||||
		DataTypeSliceString,
 | 
			
		||||
		DataTypeSliceAny,
 | 
			
		||||
		DataTypeSliceBool,
 | 
			
		||||
		DataTypeSliceMapStringAny,
 | 
			
		||||
		DataTypeSliceInt,
 | 
			
		||||
		DataTypeSliceUint,
 | 
			
		||||
		DataTypeSliceFloat,
 | 
			
		||||
		DataTypeSliceMapAnyAny,
 | 
			
		||||
		DataTypeSliceSlice,
 | 
			
		||||
	}
 | 
			
		||||
	DataTypeMap = []DataType{
 | 
			
		||||
		DataTypeMapStrAny,
 | 
			
		||||
		DataTypeMapAnyAny,
 | 
			
		||||
		DataTypeMapStrBool,
 | 
			
		||||
		DataTypeMapStrInt,
 | 
			
		||||
		DataTypeMapStrFloat,
 | 
			
		||||
		DataTypeMapStrUint,
 | 
			
		||||
		DataTypeMapStrSlice,
 | 
			
		||||
		DataTypeMapStrStr,
 | 
			
		||||
	}
 | 
			
		||||
	DataTypeMapMarshal = []DataType{
 | 
			
		||||
		DataTypeMapStrAnyWithMarshal,
 | 
			
		||||
		DataTypeMapAnyAnyWithMarshal,
 | 
			
		||||
		DataTypeMapStrBoolWithMarshal,
 | 
			
		||||
		DataTypeMapStrIntWithMarshal,
 | 
			
		||||
		DataTypeMapStrFloatWithMarshal,
 | 
			
		||||
		DataTypeMapStrUintWithMarshal,
 | 
			
		||||
		DataTypeMapStrSliceWithMarshal,
 | 
			
		||||
		DataTypeMapStrStrWithMarshal,
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func getMergeDataTypeList(dataTypeList ...[]DataType) []DataType {
 | 
			
		||||
	res := []DataType{}
 | 
			
		||||
	for _, dataTypeItemList := range dataTypeList {
 | 
			
		||||
		res = append(res, dataTypeItemList...)
 | 
			
		||||
	}
 | 
			
		||||
	return res
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										562
									
								
								validator.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										562
									
								
								validator.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,562 @@
 | 
			
		||||
// Package consts ...
 | 
			
		||||
//
 | 
			
		||||
// Description : consts ...
 | 
			
		||||
//
 | 
			
		||||
// Author : go_developer@163.com<白茶清欢>
 | 
			
		||||
//
 | 
			
		||||
// Date : 2025-01-22 16:08
 | 
			
		||||
// @see: https://github.com/go-playground/validator/blob/master/README.md#strings
 | 
			
		||||
// @demo: https://www.cnblogs.com/zj420255586/p/13542395.html
 | 
			
		||||
package consts
 | 
			
		||||
 | 
			
		||||
type ValidatorRule string // 验证规则
 | 
			
		||||
 | 
			
		||||
func (vr *ValidatorRule) String() string {
 | 
			
		||||
	if nil == vr {
 | 
			
		||||
		return ""
 | 
			
		||||
	}
 | 
			
		||||
	return string(*vr)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (vr *ValidatorRule) MarshalJSON() ([]byte, error) {
 | 
			
		||||
	return []byte(vr.String()), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsValid 验证规则是否有效
 | 
			
		||||
func (vr *ValidatorRule) IsValid() bool {
 | 
			
		||||
	_, exist := ValidatorRuleSupportDataTypeTable[*vr]
 | 
			
		||||
	if !exist {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	rule := ValidatorRuleSupportDataTypeTable[*vr].ValidatorRule
 | 
			
		||||
	if vr.String() != (&rule).String() {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	return exist
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Config 验证规则的配置
 | 
			
		||||
//
 | 
			
		||||
// Author : go_developer@163.com<白茶清欢>
 | 
			
		||||
//
 | 
			
		||||
// Date : 16:10 2025/1/22
 | 
			
		||||
func (vr *ValidatorRule) Config() ValidatorRuleConfig {
 | 
			
		||||
	return ValidatorRuleSupportDataTypeTable[*vr]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsSupportDataType 是否支持指定的数据类型
 | 
			
		||||
//
 | 
			
		||||
// Author : go_developer@163.com<白茶清欢>
 | 
			
		||||
//
 | 
			
		||||
// Date : 16:11 2025/1/22
 | 
			
		||||
func (vr *ValidatorRule) IsSupportDataType(dataType DataType) bool {
 | 
			
		||||
	dataTypeList := vr.Config().SupportDataTypeList
 | 
			
		||||
	if len(dataTypeList) == 0 {
 | 
			
		||||
		// 未配置则认为支持
 | 
			
		||||
		return true
 | 
			
		||||
	}
 | 
			
		||||
	for _, dataTypeItem := range dataTypeList {
 | 
			
		||||
		if dataType.String() == dataTypeItem.String() {
 | 
			
		||||
			return true
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ValidatorRuleConfig struct {
 | 
			
		||||
	ValidatorRule       ValidatorRule `json:"validator_rule"`         // 验证规则
 | 
			
		||||
	Description         string        `json:"description"`            // 规则描述
 | 
			
		||||
	SupportDataTypeList []DataType    `json:"support_data_type_list"` // 支持的数据类型列表
 | 
			
		||||
	MinParamCnt         int           `json:"min_param_cnt"`          // 最小参数数量(闭区间)
 | 
			
		||||
	MaxParamCnt         int           `json:"max_param_cnt"`          // 最大参数数量(闭区间)
 | 
			
		||||
	ParamCntMustEven    bool          `json:"param_cnt_must_even"`    // 参数数量必须是偶数
 | 
			
		||||
	WithoutParam        bool          `json:"without_param"`          // 没有参数, 此值为 true, 忽略 MinParamCnt / MaxParamCnt / ParamCntMustEven
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ValidatorRuleSupportDataTypeTable 验证规则支持的数据类型表
 | 
			
		||||
//
 | 
			
		||||
// Author : go_developer@163.com<白茶清欢>
 | 
			
		||||
//
 | 
			
		||||
// Date : 16:13 2025/1/22
 | 
			
		||||
var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{
 | 
			
		||||
	ValidatorRuleEqcsfield: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleEqcsfield,
 | 
			
		||||
		Description:         "跨结构体字段相等",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         1,
 | 
			
		||||
		ParamCntMustEven:    false,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleEqfield: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleEqfield,
 | 
			
		||||
		Description:         "同结构体字段相等",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         1,
 | 
			
		||||
		ParamCntMustEven:    false,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleFieldcontains: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleFieldcontains,
 | 
			
		||||
		Description:         "检查指定的字段值是否存在于字段中",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseString, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         0,
 | 
			
		||||
		ParamCntMustEven:    false,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleFieldexcludes: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleFieldexcludes,
 | 
			
		||||
		Description:         "检查指定的字段值是否不存在于字段中",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseString, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         0,
 | 
			
		||||
		ParamCntMustEven:    false,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleGtcsfield: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleGtcsfield,
 | 
			
		||||
		Description:         "大于(跨结构体)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         1,
 | 
			
		||||
		ParamCntMustEven:    false,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleGtecsfield: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleGtecsfield,
 | 
			
		||||
		Description:         "大于(同结构体)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         1,
 | 
			
		||||
		ParamCntMustEven:    false,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleGtfield: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleGtfield,
 | 
			
		||||
		Description:         "大于(同结构体)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         1,
 | 
			
		||||
		ParamCntMustEven:    false,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleGtefield: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleGtefield,
 | 
			
		||||
		Description:         "大于(同结构体)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         1,
 | 
			
		||||
		ParamCntMustEven:    false,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleLtcsfield: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleLtcsfield,
 | 
			
		||||
		Description:         "小于(跨结构体)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         1,
 | 
			
		||||
		ParamCntMustEven:    false,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleLtecsfield: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleLtecsfield,
 | 
			
		||||
		Description:         "小于等于(跨结构体)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         1,
 | 
			
		||||
		ParamCntMustEven:    false,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleLtfield: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleLtfield,
 | 
			
		||||
		Description:         "小于(同结构体)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         1,
 | 
			
		||||
		ParamCntMustEven:    false,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleLtefield: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleLtefield,
 | 
			
		||||
		Description:         "小于等于(同结构体)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         1,
 | 
			
		||||
		ParamCntMustEven:    false,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleNecsfield: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleNecsfield,
 | 
			
		||||
		Description:         "不等于(跨结构体)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         1,
 | 
			
		||||
		ParamCntMustEven:    false,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleNefield: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleNefield,
 | 
			
		||||
		Description:         "不等于(同结构体)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         1,
 | 
			
		||||
		ParamCntMustEven:    false,
 | 
			
		||||
	},
 | 
			
		||||
	ValidateRuleEq: {
 | 
			
		||||
		ValidatorRule:       ValidateRuleEq,
 | 
			
		||||
		Description:         "等于(严格校验)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         1,
 | 
			
		||||
		ParamCntMustEven:    false,
 | 
			
		||||
	},
 | 
			
		||||
	ValidateRuleEqIgnoreCase: {
 | 
			
		||||
		ValidatorRule:       ValidateRuleEqIgnoreCase,
 | 
			
		||||
		Description:         "等于(忽略大小写)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         1,
 | 
			
		||||
		ParamCntMustEven:    false,
 | 
			
		||||
	},
 | 
			
		||||
	ValidateRuleGt: {
 | 
			
		||||
		ValidatorRule:       ValidateRuleGt,
 | 
			
		||||
		Description:         "大于",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         0,
 | 
			
		||||
		ParamCntMustEven:    false,
 | 
			
		||||
	},
 | 
			
		||||
	ValidateRuleGte: {
 | 
			
		||||
		ValidatorRule:       ValidateRuleGte,
 | 
			
		||||
		Description:         "大于等于",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         0,
 | 
			
		||||
		ParamCntMustEven:    false,
 | 
			
		||||
	},
 | 
			
		||||
	ValidateRuleLt: {
 | 
			
		||||
		ValidatorRule:       ValidateRuleLt,
 | 
			
		||||
		Description:         "小于",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         0,
 | 
			
		||||
		ParamCntMustEven:    false,
 | 
			
		||||
	},
 | 
			
		||||
	ValidateRuleLte: {
 | 
			
		||||
		ValidatorRule:       ValidateRuleLte,
 | 
			
		||||
		Description:         "小于等于",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         0,
 | 
			
		||||
		ParamCntMustEven:    false,
 | 
			
		||||
	},
 | 
			
		||||
	ValidateRuleNe: {
 | 
			
		||||
		ValidatorRule:       ValidateRuleNe,
 | 
			
		||||
		Description:         "不等于(严格判断)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         0,
 | 
			
		||||
		ParamCntMustEven:    false,
 | 
			
		||||
	},
 | 
			
		||||
	ValidateRuleNeIgnoreCase: {
 | 
			
		||||
		ValidatorRule:       ValidateRuleNeIgnoreCase,
 | 
			
		||||
		Description:         "不等于(忽略大小写)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         0,
 | 
			
		||||
		ParamCntMustEven:    false,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleCommonDir: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleCommonDir,
 | 
			
		||||
		Description:         "文件夹存在",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseString, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal),
 | 
			
		||||
		WithoutParam:        true,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleCommonDirPath: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleCommonDirPath,
 | 
			
		||||
		Description:         "文件夹路径存在",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseString, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal),
 | 
			
		||||
		WithoutParam:        true,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleCommonFile: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleCommonFile,
 | 
			
		||||
		Description:         "文件存在",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseString, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal),
 | 
			
		||||
		WithoutParam:        true,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleCommonFilepath: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleCommonFilepath,
 | 
			
		||||
		Description:         "文件路径存在",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseString, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal),
 | 
			
		||||
		WithoutParam:        true,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleCommonImage: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleCommonImage,
 | 
			
		||||
		Description:         "是否图像资源",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseString, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal),
 | 
			
		||||
		WithoutParam:        true,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleCommonIsDefault: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleCommonIsDefault,
 | 
			
		||||
		Description:         "是否对应类型默认值",
 | 
			
		||||
		SupportDataTypeList: nil, // 所有类型均支持
 | 
			
		||||
		WithoutParam:        true,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleCommonLen: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleCommonLen,
 | 
			
		||||
		Description:         "数据长度",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseString, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal, DataTypeSlice, DataTypeMap), // 所有类型均支持
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         1,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleCommonMax: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleCommonMax,
 | 
			
		||||
		Description:         "最大值",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         1,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleCommonMin: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleCommonMin,
 | 
			
		||||
		Description:         "最小值",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         1,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleCommonOneOf: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleCommonOneOf,
 | 
			
		||||
		Description:         "枚举值",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool),
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         0,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleCommonRequired: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleCommonRequired,
 | 
			
		||||
		Description:         "必传校验",
 | 
			
		||||
		SupportDataTypeList: nil, // 所有类型均支持
 | 
			
		||||
		WithoutParam:        true,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleCommonRequiredIf: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleCommonRequiredIf,
 | 
			
		||||
		Description:         "当指定字段等于给定值时, 必传校验",
 | 
			
		||||
		SupportDataTypeList: nil, // 所有类型均支持
 | 
			
		||||
		MinParamCnt:         2,
 | 
			
		||||
		MaxParamCnt:         0,
 | 
			
		||||
		ParamCntMustEven:    true,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleCommonRequiredUnless: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleCommonRequiredUnless,
 | 
			
		||||
		Description:         "当指定字段不等于给定值时, 必传校验",
 | 
			
		||||
		SupportDataTypeList: nil, // 所有类型均支持
 | 
			
		||||
		MinParamCnt:         2,
 | 
			
		||||
		MaxParamCnt:         0,
 | 
			
		||||
		ParamCntMustEven:    true,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleCommonRequiredWith: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleCommonRequiredWith,
 | 
			
		||||
		Description:         "当任意一个指定字段不为零值时, 必传校验",
 | 
			
		||||
		SupportDataTypeList: nil, // 所有类型均支持
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         0,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleCommonRequiredWithAll: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleCommonRequiredWithAll,
 | 
			
		||||
		Description:         "当全部指定字段不为零值时, 必传校验",
 | 
			
		||||
		SupportDataTypeList: nil, // 所有类型均支持
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         0,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleCommonRequiredWithout: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleCommonRequiredWithout,
 | 
			
		||||
		Description:         "当任意一个字段不存在时, 必传校验",
 | 
			
		||||
		SupportDataTypeList: nil, // 所有类型均支持
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         0,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleCommonRequiredWithoutAll: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleCommonRequiredWithoutAll,
 | 
			
		||||
		Description:         "当全部字段不存在时, 必传校验",
 | 
			
		||||
		SupportDataTypeList: nil, // 所有类型均支持
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         0,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleCommonExcludedIf: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleCommonExcludedIf,
 | 
			
		||||
		Description:         "当指定字段等于给定值时,排除校验",
 | 
			
		||||
		SupportDataTypeList: nil, // 所有类型均支持
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleCommonExcludedUnless: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleCommonExcludedUnless,
 | 
			
		||||
		Description:         "当指定字段等于给定值时,排除校验",
 | 
			
		||||
		SupportDataTypeList: nil, // 所有类型均支持
 | 
			
		||||
		MinParamCnt:         2,
 | 
			
		||||
		MaxParamCnt:         0,
 | 
			
		||||
		ParamCntMustEven:    true,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleCommonExcludedWith: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleCommonExcludedWith,
 | 
			
		||||
		Description:         "当全部指定字段不为零值时,排除校验",
 | 
			
		||||
		SupportDataTypeList: nil, // 所有类型均支持
 | 
			
		||||
		MinParamCnt:         2,
 | 
			
		||||
		MaxParamCnt:         0,
 | 
			
		||||
		ParamCntMustEven:    true,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleCommonExcludedWithAll: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleCommonExcludedWithAll,
 | 
			
		||||
		Description:         "当全部指定字段不为零值时,排除校验",
 | 
			
		||||
		SupportDataTypeList: nil, // 所有类型均支持
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         0,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleCommonExcludedWithout: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleCommonExcludedWithout,
 | 
			
		||||
		Description:         "当任意一个指定字段不存在时,排除校验",
 | 
			
		||||
		SupportDataTypeList: nil, // 所有类型均支持
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         0,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleCommonExcludedWithoutAll: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleCommonExcludedWithoutAll,
 | 
			
		||||
		Description:         "当全部指定字段不存在时,排除校验",
 | 
			
		||||
		SupportDataTypeList: nil, // 所有类型均支持
 | 
			
		||||
		MinParamCnt:         1,
 | 
			
		||||
		MaxParamCnt:         0,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleCommonUnique: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleCommonUnique,
 | 
			
		||||
		Description:         "是否唯一, 用于切片验证",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeSlice), // 所有类型均支持
 | 
			
		||||
		WithoutParam:        true,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleFormatterCron: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleFormatterCron,
 | 
			
		||||
		Description:         "cron表达式验证",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseString),
 | 
			
		||||
		WithoutParam:        true,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleFormatterEmail: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleFormatterEmail,
 | 
			
		||||
		Description:         "邮箱地址验证",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseString),
 | 
			
		||||
		WithoutParam:        true,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleFormatterJson: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleFormatterJson,
 | 
			
		||||
		Description:         "json格式验证",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseString),
 | 
			
		||||
		WithoutParam:        true,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleFormatterJwt: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleFormatterJson,
 | 
			
		||||
		Description:         "JWT(JSON Web Token)验证",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseString),
 | 
			
		||||
		WithoutParam:        true,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleFormatterLatitude: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleFormatterLatitude,
 | 
			
		||||
		Description:         "纬度验证",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
		WithoutParam:        true,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleFormatterLongitude: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleFormatterLongitude,
 | 
			
		||||
		Description:         "经度验证",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
		WithoutParam:        true,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleFormatterTimezone: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleFormatterLongitude,
 | 
			
		||||
		Description:         "时区验证",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseString),
 | 
			
		||||
		WithoutParam:        true,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleFormatterUrl: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleFormatterUrl,
 | 
			
		||||
		Description:         "url验证",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseString),
 | 
			
		||||
		WithoutParam:        true,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleFormatterUri: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleFormatterUrl,
 | 
			
		||||
		Description:         "uri验证",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseString),
 | 
			
		||||
		WithoutParam:        true,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleFormatterLowercase: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleFormatterLowercase,
 | 
			
		||||
		Description:         "仅包含小写字符",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseString),
 | 
			
		||||
		WithoutParam:        true,
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleFormatterUppercase: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleFormatterUppercase,
 | 
			
		||||
		Description:         "仅包含大写字符",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseString),
 | 
			
		||||
		WithoutParam:        true,
 | 
			
		||||
	},
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	// ValidatorRuleEqcsfield .....Fields ..............
 | 
			
		||||
	ValidatorRuleEqcsfield     ValidatorRule = "eqcsfield"     // 跨结构体字段相等 eqcsfield={{struct.field}}
 | 
			
		||||
	ValidatorRuleEqfield       ValidatorRule = "eqfield"       // 同结构体字段相等 eqfield={{struct.field}}
 | 
			
		||||
	ValidatorRuleFieldcontains ValidatorRule = "fieldcontains" // 检查指定的字段值是否存在于字段中 fieldcontains={{struct.field}}
 | 
			
		||||
	ValidatorRuleFieldexcludes ValidatorRule = "fieldexcludes" // 检查指定的字段值是否存在于字段中 fieldexcludes={{struct.field}}
 | 
			
		||||
	ValidatorRuleGtcsfield     ValidatorRule = "gtcsfield"     // 大于(跨结构体) gtcsfield={{struct.field}}
 | 
			
		||||
	ValidatorRuleGtecsfield    ValidatorRule = "gtecsfield"    // 大于等于(跨结构体) gtecsfield={{struct.field}}
 | 
			
		||||
	ValidatorRuleGtfield       ValidatorRule = "gtfield"       // 大于(同结构体) gtfield={{struct.field}}
 | 
			
		||||
	ValidatorRuleGtefield      ValidatorRule = "gtefield"      // 大于等于(同结构体) gtefield={{struct.field}}
 | 
			
		||||
	ValidatorRuleLtcsfield     ValidatorRule = "ltcsfield"     // 小于(跨结构体) ltcsfield={{struct.field}}
 | 
			
		||||
	ValidatorRuleLtecsfield    ValidatorRule = "ltecsfield"    // 小于等于(跨结构体) ltecsfield={{struct.field}}
 | 
			
		||||
	ValidatorRuleLtfield       ValidatorRule = "ltfield"       // 小于(同结构体) ltfield={{struct.field}}
 | 
			
		||||
	ValidatorRuleLtefield      ValidatorRule = "ltefield"      // 小于等于(同结构体) ltefield={{struct.field}}
 | 
			
		||||
	ValidatorRuleNecsfield     ValidatorRule = "necsfield"     // 不等于(跨结构体) necsfield={{struct.field}}
 | 
			
		||||
	ValidatorRuleNefield       ValidatorRule = "nefield"       // 不等于(同结构体) nefield={{struct.field}}
 | 
			
		||||
 | 
			
		||||
	// ValidateRuleEq Comparisons ....................
 | 
			
		||||
	ValidateRuleEq           ValidatorRule = "eq"             // 相等(严格判断) eq={{any_value}}
 | 
			
		||||
	ValidateRuleEqIgnoreCase ValidatorRule = "eq_ignore_case" // 相等(忽略大小写) eq_ignore_case={{any_value}}
 | 
			
		||||
	ValidateRuleGt           ValidatorRule = "gt"             // 大于 gt={{number_value}}
 | 
			
		||||
	ValidateRuleGte          ValidatorRule = "gte"            // 大于等于 gte={{number_value}}
 | 
			
		||||
	ValidateRuleLt           ValidatorRule = "lt"             // 小于 lt={{number_value}}
 | 
			
		||||
	ValidateRuleLte          ValidatorRule = "lte"            // 小于等于 lte={{number_value}}
 | 
			
		||||
	ValidateRuleNe           ValidatorRule = "ne"             // 不相等(严格判断) ne={{any_value}}
 | 
			
		||||
	ValidateRuleNeIgnoreCase ValidatorRule = "ne_ignore_case" // 不相等(忽略大小写) ne_ignore_case={{any_value}}
 | 
			
		||||
 | 
			
		||||
	// ValidatorRuleCommonDir ............others
 | 
			
		||||
	ValidatorRuleCommonDir                ValidatorRule = "dir"                  // 文件夹存在
 | 
			
		||||
	ValidatorRuleCommonDirPath            ValidatorRule = "dirpath"              // 文件夹路径
 | 
			
		||||
	ValidatorRuleCommonFile               ValidatorRule = "file"                 // 文件存在
 | 
			
		||||
	ValidatorRuleCommonFilepath           ValidatorRule = "filepath"             // 文件路径
 | 
			
		||||
	ValidatorRuleCommonImage              ValidatorRule = "image"                // 图像
 | 
			
		||||
	ValidatorRuleCommonIsDefault          ValidatorRule = "isdefault"            // 是否默认值
 | 
			
		||||
	ValidatorRuleCommonLen                ValidatorRule = "len"                  // 长度 len={{uint_value}}
 | 
			
		||||
	ValidatorRuleCommonMax                ValidatorRule = "max"                  // 最大值 max={{int_value}}
 | 
			
		||||
	ValidatorRuleCommonMin                ValidatorRule = "min"                  // 最小值 min={{int_value}}
 | 
			
		||||
	ValidatorRuleCommonOneOf              ValidatorRule = "oneof"                // 枚举值, 多个空格分隔 oneof={{enum1}} {{enum2}} {{enum....}}
 | 
			
		||||
	ValidatorRuleCommonRequired           ValidatorRule = "required"             // 必传
 | 
			
		||||
	ValidatorRuleCommonRequiredIf         ValidatorRule = "required_if"          // 当指定字段等于给定值时,校验必传 required_if={{check_field}} {{check_field_value}} {{check_field...}} {{check_field_value...}}
 | 
			
		||||
	ValidatorRuleCommonRequiredUnless     ValidatorRule = "required_unless"      // 当指定字段不等于给定值时,校验必传 required_if={{check_field}} {{check_field_value}} {{check_field...}} {{check_field_value...}}
 | 
			
		||||
	ValidatorRuleCommonRequiredWith       ValidatorRule = "required_with"        // 当任意一个指定字段不为零值时, 校验必传 required_with={{Field1}} {{Field2}} {{Field...}}
 | 
			
		||||
	ValidatorRuleCommonRequiredWithAll    ValidatorRule = "required_with_all"    // 当全部指定字段不为零值时, 校验必传 required_with={{Field1}} {{Field2}} {{Field...}}
 | 
			
		||||
	ValidatorRuleCommonRequiredWithout    ValidatorRule = "required_without"     // 任意一个字段为空时,必传校验 required_without={{Field1}} {{Field2}} {{Field...}}
 | 
			
		||||
	ValidatorRuleCommonRequiredWithoutAll ValidatorRule = "required_without_all" // 全部字段为空时,必传校验 required_without_all={{Field1}} {{Field2}} {{Field...}}
 | 
			
		||||
	ValidatorRuleCommonExcludedIf         ValidatorRule = "excluded_if"          // 当指定字段等于给定值时,排除校验 excluded_if={{check_field}} {{check_field_value}} {{check_field...}} {{check_field_value...}}
 | 
			
		||||
	ValidatorRuleCommonExcludedUnless     ValidatorRule = "excluded_unless"      // 当指定字段不等于给定值时,排除校验 excluded_if={{check_field}} {{check_field_value}} {{check_field...}} {{check_field_value...}}
 | 
			
		||||
	ValidatorRuleCommonExcludedWith       ValidatorRule = "excluded_with"        // 当任意一个指定字段不为零值时,排除校验 excluded_with={{Field1}} {{Field2}} {{Field...}}
 | 
			
		||||
	ValidatorRuleCommonExcludedWithAll    ValidatorRule = "excluded_with_all"    // 当全部指定字段不为零值时,排除校验 excluded_with_all={{Field1}} {{Field2}} {{Field...}}
 | 
			
		||||
	ValidatorRuleCommonExcludedWithout    ValidatorRule = "excluded_without"     // 当任意一个指定字段不存在时,排除校验 excluded_without={{Field1}} {{Field2}} {{Field...}}
 | 
			
		||||
	ValidatorRuleCommonExcludedWithoutAll ValidatorRule = "excluded_without_all" // 当q廍指定字段不存在时,排除校验 excluded_without-all={{Field1}} {{Field2}} {{Field...}}
 | 
			
		||||
	ValidatorRuleCommonUnique             ValidatorRule = "unique"               // 数据唯一校验
 | 
			
		||||
 | 
			
		||||
	// ValidatorRuleFormatterCron ............. formatter
 | 
			
		||||
	ValidatorRuleFormatterCron      ValidatorRule = "cron"      // cron表达式
 | 
			
		||||
	ValidatorRuleFormatterEmail     ValidatorRule = "email"     // 邮件地址
 | 
			
		||||
	ValidatorRuleFormatterJson      ValidatorRule = "json"      // json格式
 | 
			
		||||
	ValidatorRuleFormatterJwt       ValidatorRule = "jwt"       // JSON Web Token (JWT)
 | 
			
		||||
	ValidatorRuleFormatterLatitude  ValidatorRule = "latitude"  // 纬度
 | 
			
		||||
	ValidatorRuleFormatterLongitude ValidatorRule = "longitude" // 经度
 | 
			
		||||
	ValidatorRuleFormatterTimezone  ValidatorRule = "timezone"  // 时区
 | 
			
		||||
	ValidatorRuleFormatterUrl       ValidatorRule = "url"       // url
 | 
			
		||||
	ValidatorRuleFormatterUri       ValidatorRule = "uri"       // uri
 | 
			
		||||
	ValidatorRuleFormatterLowercase ValidatorRule = "lowercase" // 仅包含小写字符
 | 
			
		||||
	ValidatorRuleFormatterUppercase ValidatorRule = "uppercase" // 仅包含大写字符
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// RegisterCustomValidatorRule 注册自定义的验证方法, 允许通过此函数, 覆盖内部默认的配置
 | 
			
		||||
//
 | 
			
		||||
// Author : go_developer@163.com<白茶清欢>
 | 
			
		||||
//
 | 
			
		||||
// Date : 18:35 2025/1/24
 | 
			
		||||
func RegisterCustomValidatorRule(rule ValidatorRule, validatorRuleConfig ValidatorRuleConfig) {
 | 
			
		||||
	ValidatorRuleSupportDataTypeTable[rule] = validatorRuleConfig
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user