diff --git a/validator.go b/validator.go index a067bd4..d6363a5 100644 --- a/validator.go +++ b/validator.go @@ -51,6 +51,10 @@ 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 验证规则支持的数据类型表 @@ -63,196 +67,291 @@ var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{ 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: "当任意一个字段为空时, 必传校验", + Description: "当任意一个字段不存在时, 必传校验", SupportDataTypeList: nil, // 所有类型均支持 + MinParamCnt: 1, + MaxParamCnt: 0, }, ValidatorRuleCommonRequiredWithoutAll: { ValidatorRule: ValidatorRuleCommonRequiredWithoutAll, - Description: "当全部字段为空时, 必传校验", + Description: "当全部字段不存在时, 必传校验", SupportDataTypeList: nil, // 所有类型均支持 + MinParamCnt: 1, + MaxParamCnt: 0, }, ValidatorRuleCommonExcludedIf: { ValidatorRule: ValidatorRuleCommonExcludedIf, @@ -263,86 +362,110 @@ var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{ 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, }, }