Merge pull request '增加验证规则的枚举值' (#2) from feature/validator into master
Reviewed-on: #2
This commit is contained in:
commit
8ebc73a0df
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
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user