From 6a9339c7dea241e022c1070fadeebf52bd8bfc16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Thu, 16 May 2024 21:38:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AD=97=E7=AC=A6=E4=B8=B2?= =?UTF-8?q?=E5=AD=90=E4=B8=B2=E7=9A=84=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- define/rule.go | 3 ++- handle_base.go | 27 +++++++++++++++++++++++++++ rule_instance.go | 3 ++- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/define/rule.go b/define/rule.go index cb6ac33..9e50a44 100644 --- a/define/rule.go +++ b/define/rule.go @@ -58,7 +58,8 @@ type ValueLimit struct { // // Date : 11:16 2024/4/29 type StringValueLimit struct { - IncludeSubStrList []string `json:"include_sub_str_list"` // 必须包含指定的子串 + IncludeSubStrList []string `json:"include_sub_str_list"` // 必须包含指定的子串, 必须全部包含 + NotIncludeSubStrList []string `json:"not_include_sub_str_list"` // 必须不能包含的子串, 包含任意一个都不行 } // MapValueLimit map数据的限制 diff --git a/handle_base.go b/handle_base.go index 8d5714b..0d571b5 100644 --- a/handle_base.go +++ b/handle_base.go @@ -13,6 +13,7 @@ import ( "git.zhangdeman.cn/zhangdeman/util" "git.zhangdeman.cn/zhangdeman/wrapper" "strconv" + "strings" ) // handleFloat 处理float数据 @@ -118,6 +119,32 @@ func handleString(inputVal any, rule *define.FieldRule) (string, error) { if nil == rule.ValueLimit { return formatData, nil } + if nil != rule.ValueLimit.String { + if len(rule.ValueLimit.String.IncludeSubStrList) > 0 { + include := true + for _, item := range rule.ValueLimit.String.IncludeSubStrList { + if !strings.Contains(formatData, item) { + include = false + break + } + } + if !include { + return "", fmt.Errorf("%v : data type is string, value is %v, not include must substr", rule.Path, formatData) + } + } + if len(rule.ValueLimit.String.NotIncludeSubStrList) > 0 { + include := false + for _, item := range rule.ValueLimit.String.NotIncludeSubStrList { + if strings.Contains(formatData, item) { + include = true + break + } + } + if include { + return "", fmt.Errorf("%v : data type is string, value is %v, include not must substr", rule.Path, formatData) + } + } + } if nil != rule.ValueLimit.Min { if float64(len(formatData)) < *rule.ValueLimit.Min { return "", fmt.Errorf("%v : data type is string, min length is %v, real length is %v", rule.Path, *rule.ValueLimit.Min, len(formatData)) diff --git a/rule_instance.go b/rule_instance.go index e9a2961..4c9e6f0 100644 --- a/rule_instance.go +++ b/rule_instance.go @@ -29,7 +29,8 @@ func NewDefaultFieldRule(path string, dataType string, isRequired bool, defaultV Min: nil, Max: nil, String: &define.StringValueLimit{ - IncludeSubStrList: make([]string, 0), + IncludeSubStrList: make([]string, 0), + NotIncludeSubStrList: make([]string, 0), }, Map: &define.MapValueLimit{IncludeFieldList: make([]string, 0)}, },