diff --git a/validator.go b/validator.go index 3f9abe6..b11a79a 100644 --- a/validator.go +++ b/validator.go @@ -71,12 +71,10 @@ type ValidatorRuleConfig struct { } // ValidatorRuleSupportDataTypeTable 验证规则支持的数据类型表 -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 16:13 2025/1/22 -var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{ - ValidatorRuleEqcsfield: { +var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{} +var ValidatorRuleSupportDataTypeList = []ValidatorRuleConfig{ + + { ValidatorRule: ValidatorRuleEqcsfield, Description: "跨结构体字段相等", SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal), @@ -84,7 +82,7 @@ var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{ MaxParamCnt: 1, ParamCntMustEven: false, }, - ValidatorRuleEqfield: { + { ValidatorRule: ValidatorRuleEqfield, Description: "同结构体字段相等", SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal), @@ -92,7 +90,7 @@ var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{ MaxParamCnt: 1, ParamCntMustEven: false, }, - ValidatorRuleFieldcontains: { + { ValidatorRule: ValidatorRuleFieldcontains, Description: "检查指定的字段值是否存在于字段中", SupportDataTypeList: getMergeDataTypeList(DataTypeBaseString, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal), @@ -100,7 +98,7 @@ var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{ MaxParamCnt: 0, ParamCntMustEven: false, }, - ValidatorRuleFieldexcludes: { + { ValidatorRule: ValidatorRuleFieldexcludes, Description: "检查指定的字段值是否不存在于字段中", SupportDataTypeList: getMergeDataTypeList(DataTypeBaseString, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal), @@ -108,7 +106,7 @@ var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{ MaxParamCnt: 0, ParamCntMustEven: false, }, - ValidatorRuleGtcsfield: { + { ValidatorRule: ValidatorRuleGtcsfield, Description: "大于(跨结构体)", SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber), @@ -116,7 +114,7 @@ var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{ MaxParamCnt: 1, ParamCntMustEven: false, }, - ValidatorRuleGtecsfield: { + { ValidatorRule: ValidatorRuleGtecsfield, Description: "大于(同结构体)", SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber), @@ -124,7 +122,7 @@ var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{ MaxParamCnt: 1, ParamCntMustEven: false, }, - ValidatorRuleGtfield: { + { ValidatorRule: ValidatorRuleGtfield, Description: "大于(同结构体)", SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber), @@ -132,7 +130,7 @@ var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{ MaxParamCnt: 1, ParamCntMustEven: false, }, - ValidatorRuleGtefield: { + { ValidatorRule: ValidatorRuleGtefield, Description: "大于(同结构体)", SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber), @@ -140,7 +138,7 @@ var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{ MaxParamCnt: 1, ParamCntMustEven: false, }, - ValidatorRuleLtcsfield: { + { ValidatorRule: ValidatorRuleLtcsfield, Description: "小于(跨结构体)", SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber), @@ -148,7 +146,7 @@ var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{ MaxParamCnt: 1, ParamCntMustEven: false, }, - ValidatorRuleLtecsfield: { + { ValidatorRule: ValidatorRuleLtecsfield, Description: "小于等于(跨结构体)", SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber), @@ -156,7 +154,7 @@ var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{ MaxParamCnt: 1, ParamCntMustEven: false, }, - ValidatorRuleLtfield: { + { ValidatorRule: ValidatorRuleLtfield, Description: "小于(同结构体)", SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber), @@ -164,7 +162,7 @@ var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{ MaxParamCnt: 1, ParamCntMustEven: false, }, - ValidatorRuleLtefield: { + { ValidatorRule: ValidatorRuleLtefield, Description: "小于等于(同结构体)", SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber), @@ -172,7 +170,7 @@ var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{ MaxParamCnt: 1, ParamCntMustEven: false, }, - ValidatorRuleNecsfield: { + { ValidatorRule: ValidatorRuleNecsfield, Description: "不等于(跨结构体)", SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal), @@ -180,7 +178,7 @@ var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{ MaxParamCnt: 1, ParamCntMustEven: false, }, - ValidatorRuleNefield: { + { ValidatorRule: ValidatorRuleNefield, Description: "不等于(同结构体)", SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal), @@ -188,147 +186,155 @@ var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{ MaxParamCnt: 1, ParamCntMustEven: false, }, - ValidateRuleEq: { - ValidatorRule: ValidateRuleEq, + { + ValidatorRule: ValidatorRuleEq, Description: "等于(严格校验)", SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal), MinParamCnt: 1, MaxParamCnt: 1, ParamCntMustEven: false, }, - ValidateRuleEqIgnoreCase: { - ValidatorRule: ValidateRuleEqIgnoreCase, + { + ValidatorRule: ValidatorRuleEqIgnoreCase, Description: "等于(忽略大小写)", SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal), MinParamCnt: 1, MaxParamCnt: 1, ParamCntMustEven: false, }, - ValidateRuleGt: { - ValidatorRule: ValidateRuleGt, + { + ValidatorRule: ValidatorRuleGt, Description: "大于", SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber), MinParamCnt: 1, MaxParamCnt: 0, ParamCntMustEven: false, }, - ValidateRuleGte: { - ValidatorRule: ValidateRuleGte, + { + ValidatorRule: ValidatorRuleGte, Description: "大于等于", SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber), MinParamCnt: 1, MaxParamCnt: 0, ParamCntMustEven: false, }, - ValidateRuleLt: { - ValidatorRule: ValidateRuleLt, + { + ValidatorRule: ValidatorRuleLt, Description: "小于", SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber), MinParamCnt: 1, MaxParamCnt: 0, ParamCntMustEven: false, }, - ValidateRuleLte: { - ValidatorRule: ValidateRuleLte, + { + ValidatorRule: ValidatorRuleLte, Description: "小于等于", SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber), MinParamCnt: 1, MaxParamCnt: 0, ParamCntMustEven: false, }, - ValidateRuleNe: { - ValidatorRule: ValidateRuleNe, + { + ValidatorRule: ValidatorRuleNe, Description: "不等于(严格判断)", SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal), MinParamCnt: 1, MaxParamCnt: 0, ParamCntMustEven: false, }, - ValidateRuleNeIgnoreCase: { - ValidatorRule: ValidateRuleNeIgnoreCase, + { + ValidatorRule: ValidatorRuleNeIgnoreCase, Description: "不等于(忽略大小写)", SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool, DataTypeSliceMarshal, DataTypeSliceSplit, DataTypeMapMarshal), MinParamCnt: 1, MaxParamCnt: 0, ParamCntMustEven: false, }, - ValidatorRuleCommonDir: { + { + ValidatorRule: ValidatorRuleRegexp, + Description: "正则表达式", + SupportDataTypeList: getMergeDataTypeList(DataTypeBaseString), + MinParamCnt: 1, + MaxParamCnt: 1, + ParamCntMustEven: false, + }, + { 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, }, - ValidatorRuleCommonOmitempty: { + { ValidatorRule: ValidatorRuleCommonOmitempty, 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, // 所有类型均支持 @@ -336,7 +342,7 @@ var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{ MaxParamCnt: 0, ParamCntMustEven: true, }, - ValidatorRuleCommonRequiredUnless: { + { ValidatorRule: ValidatorRuleCommonRequiredUnless, Description: "当指定字段不等于给定值时, 必传校验", SupportDataTypeList: nil, // 所有类型均支持 @@ -344,40 +350,40 @@ var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{ 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, // 所有类型均支持 @@ -385,7 +391,7 @@ var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{ MaxParamCnt: 0, ParamCntMustEven: true, }, - ValidatorRuleCommonExcludedWith: { + { ValidatorRule: ValidatorRuleCommonExcludedWith, Description: "当全部指定字段不为零值时,排除校验", SupportDataTypeList: nil, // 所有类型均支持 @@ -393,94 +399,94 @@ var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{ 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), @@ -488,6 +494,12 @@ var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{ }, } +func init() { + for _, item := range ValidatorRuleSupportDataTypeList { + ValidatorRuleSupportDataTypeTable[item.ValidatorRule] = item + } +} + var ( // ValidatorRuleEqcsfield .....Fields .............. ValidatorRuleEqcsfield ValidatorRule = "eqcsfield" // 跨结构体字段相等 eqcsfield={{struct.field}} @@ -505,15 +517,16 @@ var ( 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}} + // ValidatorRuleEq Comparisons .................... + ValidatorRuleEq ValidatorRule = "eq" // 相等(严格判断) eq={{any_value}} + ValidatorRuleEqIgnoreCase ValidatorRule = "eq_ignore_case" // 相等(忽略大小写) eq_ignore_case={{any_value}} + ValidatorRuleGt ValidatorRule = "gt" // 大于 gt={{number_value}} + ValidatorRuleGte ValidatorRule = "gte" // 大于等于 gte={{number_value}} + ValidatorRuleLt ValidatorRule = "lt" // 小于 lt={{number_value}} + ValidatorRuleLte ValidatorRule = "lte" // 小于等于 lte={{number_value}} + ValidatorRuleNe ValidatorRule = "ne" // 不相等(严格判断) ne={{any_value}} + ValidatorRuleNeIgnoreCase ValidatorRule = "ne_ignore_case" // 不相等(忽略大小写) ne_ignore_case={{any_value}} + ValidatorRuleRegexp ValidatorRule = "regexp" // 正则表达式 // ValidatorRuleCommonDir ............others ValidatorRuleCommonDir ValidatorRule = "dir" // 文件夹存在