// 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), }, } var ( // 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" // 不相等(忽略大小写) // ValidatorRuleCommonDir ............others ValidatorRuleCommonDir ValidatorRule = "dir" // 文件夹存在 ValidatorRuleCommonDirPath ValidatorRule = "dirpath" // 文件夹路径 ValidatorRuleCommonFile ValidatorRule = "file" // 文件存在 ValidatorRuleCommonFilepath ValidatorRule = "filepath" // 文件路径 ValidatorRuleCommonImage ValidatorRule = "image" // 图像 ValidatorRuleCommonIsDefault ValidatorRule = "isdefault" // 是否默认值 ValidatorRuleCommonLen ValidatorRule = "len" // 长度 ValidatorRuleCommonMax ValidatorRule = "max" // 最大值 ValidatorRuleCommonMin ValidatorRule = "min" // 最小值 ValidatorRuleCommonOneOf ValidatorRule = "oneof" // 枚举值, 多个空格分隔 ValidatorRuleCommonRequired ValidatorRule = "required" // 必传 ValidatorRuleCommonRequiredIf ValidatorRule = "required_if" // ValidatorRuleCommonRequiredUnless ValidatorRule = "required_unless" // ValidatorRuleCommonRequiredWith ValidatorRule = "required_with" // ValidatorRuleCommonRequiredWithAll ValidatorRule = "required_with_all" // ValidatorRuleCommonRequiredWithout ValidatorRule = "required_without" // ValidatorRuleCommonRequiredWithoutAll ValidatorRule = "required_without_all" // ValidatorRuleCommonExcludedIf ValidatorRule = "excluded_if" // ValidatorRuleCommonExcludedUnless ValidatorRule = "excluded_unless" // ValidatorRuleCommonExcludedWith ValidatorRule = "excluded_with" // ValidatorRuleCommonExcludedWithAll ValidatorRule = "excluded_with_all" // ValidatorRuleCommonExcludedWithout ValidatorRule = "excluded_without" // ValidatorRuleCommonExcludedWithoutAll ValidatorRule = "excluded_without_all" // 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" // 时区 )