增加验证规则的枚举值 #2
							
								
								
									
										18
									
								
								data_type.go
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								data_type.go
									
									
									
									
									
								
							@ -194,3 +194,21 @@ 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}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func getMergeDataTypeList(dataTypeList ...[]DataType) []DataType {
 | 
			
		||||
	res := []DataType{}
 | 
			
		||||
	for _, dataTypeItemList := range dataTypeList {
 | 
			
		||||
		res = append(res, dataTypeItemList...)
 | 
			
		||||
	}
 | 
			
		||||
	return res
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										208
									
								
								validator.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										208
									
								
								validator.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,208 @@
 | 
			
		||||
// 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 {
 | 
			
		||||
	return string(*vr)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (vr *ValidatorRule) MarshalJSON() ([]byte, error) {
 | 
			
		||||
	return []byte(vr.String()), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 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"` // 支持的数据类型列表
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 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),
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleEqfield: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleEqfield,
 | 
			
		||||
		Description:         "同结构体字段相等",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool),
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleFieldcontains: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleFieldcontains,
 | 
			
		||||
		Description:         "检查指定的字段值是否存在于字段中",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseString),
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleFieldexcludes: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleFieldexcludes,
 | 
			
		||||
		Description:         "检查指定的字段值是否不存在于字段中",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseString),
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleGtcsfield: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleGtcsfield,
 | 
			
		||||
		Description:         "大于(跨结构体)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleGtecsfield: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleGtecsfield,
 | 
			
		||||
		Description:         "大于(同结构体)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleGtfield: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleGtfield,
 | 
			
		||||
		Description:         "大于(同结构体)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleGtefield: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleGtefield,
 | 
			
		||||
		Description:         "大于(同结构体)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleLtcsfield: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleLtcsfield,
 | 
			
		||||
		Description:         "小于(跨结构体)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleLtecsfield: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleLtecsfield,
 | 
			
		||||
		Description:         "小于等于(跨结构体)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleLtfield: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleLtfield,
 | 
			
		||||
		Description:         "小于(同结构体)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleLtefield: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleLtefield,
 | 
			
		||||
		Description:         "小于等于(同结构体)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleNecsfield: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleNecsfield,
 | 
			
		||||
		Description:         "不等于(跨结构体)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool),
 | 
			
		||||
	},
 | 
			
		||||
	ValidatorRuleNefield: {
 | 
			
		||||
		ValidatorRule:       ValidatorRuleNefield,
 | 
			
		||||
		Description:         "不等于(同结构体)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool),
 | 
			
		||||
	},
 | 
			
		||||
	ValidateRuleEq: {
 | 
			
		||||
		ValidatorRule:       ValidateRuleEq,
 | 
			
		||||
		Description:         "等于(严格校验)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool),
 | 
			
		||||
	},
 | 
			
		||||
	ValidateRuleEqIgnoreCase: {
 | 
			
		||||
		ValidatorRule:       ValidateRuleEqIgnoreCase,
 | 
			
		||||
		Description:         "等于(忽略大小写)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool),
 | 
			
		||||
	},
 | 
			
		||||
	ValidateRuleGt: {
 | 
			
		||||
		ValidatorRule:       ValidateRuleGt,
 | 
			
		||||
		Description:         "大于",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
	},
 | 
			
		||||
	ValidateRuleGte: {
 | 
			
		||||
		ValidatorRule:       ValidateRuleGte,
 | 
			
		||||
		Description:         "大于等于",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
	},
 | 
			
		||||
	ValidateRuleLt: {
 | 
			
		||||
		ValidatorRule:       ValidateRuleLt,
 | 
			
		||||
		Description:         "小于",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
	},
 | 
			
		||||
	ValidateRuleLte: {
 | 
			
		||||
		ValidatorRule:       ValidateRuleLte,
 | 
			
		||||
		Description:         "小于等于",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
 | 
			
		||||
	},
 | 
			
		||||
	ValidateRuleNe: {
 | 
			
		||||
		ValidatorRule:       ValidateRuleNe,
 | 
			
		||||
		Description:         "不等于(严格判断)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool),
 | 
			
		||||
	},
 | 
			
		||||
	ValidateRuleNeIgnoreCase: {
 | 
			
		||||
		ValidatorRule:       ValidateRuleNeIgnoreCase,
 | 
			
		||||
		Description:         "不等于(忽略大小写)",
 | 
			
		||||
		SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool),
 | 
			
		||||
	},
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	// ValidatorRuleEqcsfield .....Fields ..............
 | 
			
		||||
	ValidatorRuleEqcsfield     ValidatorRule = "eqcsfield"     // 跨结构体字段相等
 | 
			
		||||
	ValidatorRuleEqfield       ValidatorRule = "eqfield"       //  同结构体字段相等
 | 
			
		||||
	ValidatorRuleFieldcontains ValidatorRule = "fieldcontains" // 检查指定的字段值是否存在于字段中
 | 
			
		||||
	ValidatorRuleFieldexcludes ValidatorRule = "fieldexcludes" // 检查指定的字段值是否存在于字段中
 | 
			
		||||
	ValidatorRuleGtcsfield     ValidatorRule = "gtcsfield"     // 大于(跨结构体)
 | 
			
		||||
	ValidatorRuleGtecsfield    ValidatorRule = "gtecsfield"    // 大于等于(跨结构体)
 | 
			
		||||
	ValidatorRuleGtfield       ValidatorRule = "gtfield"       // 大于(同结构体)
 | 
			
		||||
	ValidatorRuleGtefield      ValidatorRule = "gtefield"      // 大于等于(同结构体)
 | 
			
		||||
	ValidatorRuleLtcsfield     ValidatorRule = "ltcsfield"     // 小于(跨结构体)
 | 
			
		||||
	ValidatorRuleLtecsfield    ValidatorRule = "ltecsfield"    // 小于等于(跨结构体)
 | 
			
		||||
	ValidatorRuleLtfield       ValidatorRule = "ltfield"       // 小于(同结构体)
 | 
			
		||||
	ValidatorRuleLtefield      ValidatorRule = "ltefield"      // 小于等于(同结构体)
 | 
			
		||||
	ValidatorRuleNecsfield     ValidatorRule = "necsfield"     // 不等于(跨结构体)
 | 
			
		||||
	ValidatorRuleNefield       ValidatorRule = "nefield"       // 不等于(同结构体)
 | 
			
		||||
 | 
			
		||||
	// ValidateRuleEq Comparisons ....................
 | 
			
		||||
	ValidateRuleEq           ValidatorRule = "eq"             // 相等(严格判断)
 | 
			
		||||
	ValidateRuleEqIgnoreCase ValidatorRule = "eq_ignore_case" // 相等(忽略大小写)
 | 
			
		||||
	ValidateRuleGt           ValidatorRule = "gt"             // 大于
 | 
			
		||||
	ValidateRuleGte          ValidatorRule = "gte"            // 大于等于
 | 
			
		||||
	ValidateRuleLt           ValidatorRule = "lt"             // 小于
 | 
			
		||||
	ValidateRuleLte          ValidatorRule = "lte"            // 小于等于
 | 
			
		||||
	ValidateRuleNe           ValidatorRule = "ne"             // 不相等(严格判断)
 | 
			
		||||
	ValidateRuleNeIgnoreCase ValidatorRule = "ne_ignore_case" // 不相等(忽略大小写)
 | 
			
		||||
 | 
			
		||||
	// ValidatorCommonDir ............others
 | 
			
		||||
	ValidatorCommonDir       ValidatorRule = "dir"       // 文件夹存在
 | 
			
		||||
	ValidatorCommonDirPath   ValidatorRule = "dirpath"   // 文件夹路径
 | 
			
		||||
	ValidatorCommonFile      ValidatorRule = "file"      // 文件存在
 | 
			
		||||
	ValidatorCommonFilepath  ValidatorRule = "filepath"  // 文件路径
 | 
			
		||||
	ValidatorCommonImage     ValidatorRule = "image"     // 图像
 | 
			
		||||
	ValidatorCommonIsDefault ValidatorRule = "isdefault" // 是否默认值
 | 
			
		||||
)
 | 
			
		||||
		Reference in New Issue
	
	Block a user