数据验证规则
define | ||
.gitignore | ||
go.mod | ||
go.sum | ||
handle_base_test.go | ||
handle_base.go | ||
handle_map.go | ||
handle_slice.go | ||
LICENSE | ||
README.md | ||
rule_instance.go | ||
run_test.go | ||
run.go |
数据验证规则说明文档
验证数据结构定义
define.FieldRule
配置属性含义及使用方式说明
属性 | 含义 | 是否必须配置 | 默认值 | 使用方式 |
---|---|---|---|---|
path |
要验证的字段路径 | 是 | - | 用于从数据源中获取字段值 |
type |
path所对应value的 数据类型 , 支持的类型参照后续说明 |
是 | - | 用于验证字段值是否未指定类型或者是否可以转换成指定类型 |
is_required |
是否必须存在 | 否 | false | 非必传 |
allow_empty |
字符串类型, 空字符串是否为合法值 | 否 | false | 配合is_required验证字符串 |
allow_zero |
数字类型(int/uint/float), 0是否为合法值 | 否 | false | 配合is_required验证数字 |
allow_nil |
复杂类型(slice/map), nil是否为合法值 | 否 | false | 配合is_required验证复杂类型 |
disable_auto_convert |
禁用数据类型自动转换 | 否 | false | 用于自动检测输入数据是否能转换成目标类型,搭配 disable_rewrite 一起使用 |
disable_rewrite |
禁用数据值重写 | 否 | false | 若直接输入的字段值类型和目标类型不一致, 但可以转换成目标类型, 开启重写后会重写指定字段值, 不开启则只尝试参数类型转换验证 |
default_value |
非必传字段,且字段综合判断为不存在时的默认值 | 否 | 空字符转, 空字符串等价于未配置默认值 | 非必传字段且未传时, 会使用此字段值进行填充 |
disable_auto_trim_space |
是否禁用自动去除前后空格 | 否 | false | 未禁用时, 会通过 strings.TrimSpace进行空格去除 |
required_condition_group |
有条件必传的必传条件 | 否 | nil | 配合is_required |
value_limit |
数据值的基础限制 | 否 | nil | 对基础类型的基本验证 |
slice_config |
slice数据转换的配置 | 否 | nil | 针对slice数据转换的处理 |
value_limit - 基础数据值的限制
属性 | 含义 | 是否必须配置 | 默认值 | 使用方式 |
---|---|---|---|---|
enum_list |
合法枚举值列表 | 否 | nil | 用于验证参数是否在枚举值列表的白名单中 |
min |
最小值 | 否 | nil | 对于 int/uint/float64, 此值为最小值;对于 string/map/slice,此值为最小长度 |
max |
最大值 | 否 | nil | 对于 int/uint/float64, 此值为最大值;对于 string/map/slice,此值为最大长度 |
string |
对字符串独有的验证 | 否 | nil | 验证字符串专用配置 |
map |
对于map独有的验证 | 否 | nil | 验证map独有配置 |
string - 字符串独有配置
属性 | 含义 | 是否必须配置 | 默认值 | 使用方式 |
---|---|---|---|---|
include_sub_str_list |
需要包含的子串列表 | 否 | nil | 验证字符串是否包含指定子串,必须全部包含才是合法值 |
not_include_sub_str_list |
不允许包含的子串列表 | 否 | nil | 验证字符串是否包含黑名单子串,包含任意一个, 均为非法值 |
map - map独有配置
属性 | 含义 | 是否必须配置 | 默认值 | 使用方式 |
---|---|---|---|---|
include_field_list |
需要包含的key列表 | 否 | nil | map数据中必须包含的key列表, 必须全部包含才是一个合法值 |
slice_config - slice数据转换的处理
属性 | 含义 | 是否必须配置 | 默认值 | 使用方式 |
---|---|---|---|---|
slice_mode |
输入的slice数据模式 | 是 | - | REAL - 输入直接是slice MARSHAL - json序列化之后的字符串 WITH_SPLIT_CHAR - 使用指定字符串分隔 |
disable_ignore_empty |
忽略空字符串 | 否 | false | model = WITH_SPLIT_CHAR, 忽略分割后的空字符串 |
split_char |
分隔符 | 否 | nil | model = WITH_SPLIT_CHAR, 分割字符串的分隔符 |
各个字段使用场景实例
is_required - 数据是否必须存在
此属性搭配 allow_empty
、allow_zero
、allow_nil
使用
关于属性判定为 不存在
的场景有如下几个:
- 输入的数据源中, 不存在指定字段
- 输入的数据源中, 存在指定字段:
- 字段类型为
int/float/uint
, 切 value = 0 , 同时 allow_zero=false , 则等价于参数未传 - 字段类型为
string
, 切 value = "" , 同时 allow_empty=false , 则等价于参数未传 - 字段类型为
slice/map
, 切 value = nil , 同时 allow_nil=false , 则等价于参数未传
- 字段类型为
- 本身配置 is_required = false, 但是验证中 命中 `required_condition_group`` 验证条件, 等价于 is_required = true
disable_auto_convert - 数据类型自动转换控制
sourceData := map[string]any{
"num": "1"
}
validateRule.Path = "num"
validateRule.Type = "int"
disable_auto_convert = false 时, 即未禁用自动转换, 会返回如下数据
map[string]any{
"num": 1
}
disable_auto_convert = true 时, 即未禁用自动转换, 会返回参数验证错误
disable_rewrite - 数据验证结果重写控制
前提是 disable_auto_convert = false, 即允许参数的自动转换, 会自动使用转换后的数据值, 覆盖输入的数据值 输入数据 :
sourceData := map[string]any{
"num": "1"
}
validateRule.Type = "int"
disable_rewrite = false 时, 即允许重写, 验证完成会返回如下数据:
map[string]any{
"num": 1
}
disable_rewrite = true 时, 即允许不重写, 验证完成会将sourceData原样返回
disable_auto_trim_space - 自动去除前后空格
disable_auto_trim_space = false, 即未禁用去除前后空格, 则
string(" 1 ") => int(1) , 转换关系成立
disable_auto_trim_space = true, 即禁用去除前后空格, 则
string(" 1 ") => int(1) , 转换关系不成立
支持配置的数据类型
配置值 | 实际映射类型 |
---|---|
int | int64 |
uint | uint64 |
float | float64 |
bool | bool |
string | string |
[]int | []int64 |
[]uint | []uint64 |
[]float | []float64 |
[]bool | []bool |
[]string | []string |
[]any | []any |
map[string]string | map[string]string |
map[string]int | map[string]int64 |
map[string]uint | map[string]uint64 |
map[string]float | map[string]float64 |
map[string]bool | map[string]bool |
map[string]any | map[string]any |
map[string][]any | map[string][]any |
map[any]any | map[any]any |
any | any |
[]int_split | []int64, 需要配合数组转换配置 |
[]uint_split | []uint64, 需要配合数组转换配置 |
[]float_split | []float, 需要配合数组转换配置 |
[]bool_split | []bool, 需要配合数组转换配置 |
[]string_split | []string, 需要配合数组转换配置 |
[][]any | [][]any |
[]map[any]any | []map[any]any |
[]map[string]any | []map[string]any |