diff --git a/util/gvalid/internal/builtin/builtin_in.go b/util/gvalid/internal/builtin/builtin_in.go index 838b64d47..dfc9a828e 100644 --- a/util/gvalid/internal/builtin/builtin_in.go +++ b/util/gvalid/internal/builtin/builtin_in.go @@ -32,12 +32,16 @@ func (r RuleIn) Message() string { } func (r RuleIn) Run(in RunInput) error { - var ok bool + var ( + ok bool + inputValueString = in.Value.String() + ) + for _, rulePattern := range gstr.SplitAndTrim(in.RulePattern, ",") { if in.Option.CaseInsensitive { - ok = strings.EqualFold(in.Value.String(), strings.TrimSpace(rulePattern)) + ok = strings.EqualFold(inputValueString, strings.TrimSpace(rulePattern)) } else { - ok = strings.Compare(in.Value.String(), strings.TrimSpace(rulePattern)) == 0 + ok = strings.Compare(inputValueString, strings.TrimSpace(rulePattern)) == 0 } if ok { return nil diff --git a/util/gvalid/internal/builtin/builtin_required_if.go b/util/gvalid/internal/builtin/builtin_required_if.go index df116470e..45123c066 100644 --- a/util/gvalid/internal/builtin/builtin_required_if.go +++ b/util/gvalid/internal/builtin/builtin_required_if.go @@ -38,13 +38,14 @@ func (r RuleRequiredIf) Run(in RunInput) error { required = false array = strings.Split(in.RulePattern, ",") foundValue interface{} + dataMap = in.Data.Map() ) // It supports multiple field and value pairs. if len(array)%2 == 0 { for i := 0; i < len(array); { tk := array[i] tv := array[i+1] - _, foundValue = gutil.MapPossibleItemByKey(in.Data.Map(), tk) + _, foundValue = gutil.MapPossibleItemByKey(dataMap, tk) if in.Option.CaseInsensitive { required = strings.EqualFold(tv, gconv.String(foundValue)) } else { diff --git a/util/gvalid/internal/builtin/builtin_required_unless.go b/util/gvalid/internal/builtin/builtin_required_unless.go index b4e122ed6..b2e41a282 100644 --- a/util/gvalid/internal/builtin/builtin_required_unless.go +++ b/util/gvalid/internal/builtin/builtin_required_unless.go @@ -38,13 +38,15 @@ func (r RuleRequiredUnless) Run(in RunInput) error { required = true array = strings.Split(in.RulePattern, ",") foundValue interface{} + dataMap = in.Data.Map() ) + // It supports multiple field and value pairs. if len(array)%2 == 0 { for i := 0; i < len(array); { tk := array[i] tv := array[i+1] - _, foundValue = gutil.MapPossibleItemByKey(in.Data.Map(), tk) + _, foundValue = gutil.MapPossibleItemByKey(dataMap, tk) if in.Option.CaseInsensitive { required = !strings.EqualFold(tv, gconv.String(foundValue)) } else { diff --git a/util/gvalid/internal/builtin/builtin_required_with.go b/util/gvalid/internal/builtin/builtin_required_with.go index 9499c6bb9..c82044c17 100644 --- a/util/gvalid/internal/builtin/builtin_required_with.go +++ b/util/gvalid/internal/builtin/builtin_required_with.go @@ -38,9 +38,11 @@ func (r RuleRequiredWith) Run(in RunInput) error { required = false array = strings.Split(in.RulePattern, ",") foundValue interface{} + dataMap = in.Data.Map() ) + for i := 0; i < len(array); i++ { - _, foundValue = gutil.MapPossibleItemByKey(in.Data.Map(), array[i]) + _, foundValue = gutil.MapPossibleItemByKey(dataMap, array[i]) if !empty.IsEmpty(foundValue) { required = true break diff --git a/util/gvalid/internal/builtin/builtin_required_with_all.go b/util/gvalid/internal/builtin/builtin_required_with_all.go index 2d850bf79..5fd2c4acd 100644 --- a/util/gvalid/internal/builtin/builtin_required_with_all.go +++ b/util/gvalid/internal/builtin/builtin_required_with_all.go @@ -38,9 +38,11 @@ func (r RuleRequiredWithAll) Run(in RunInput) error { required = true array = strings.Split(in.RulePattern, ",") foundValue interface{} + dataMap = in.Data.Map() ) + for i := 0; i < len(array); i++ { - _, foundValue = gutil.MapPossibleItemByKey(in.Data.Map(), array[i]) + _, foundValue = gutil.MapPossibleItemByKey(dataMap, array[i]) if empty.IsEmpty(foundValue) { required = false break diff --git a/util/gvalid/internal/builtin/builtin_required_without.go b/util/gvalid/internal/builtin/builtin_required_without.go index f0efb9b4c..82465341b 100644 --- a/util/gvalid/internal/builtin/builtin_required_without.go +++ b/util/gvalid/internal/builtin/builtin_required_without.go @@ -38,9 +38,11 @@ func (r RuleRequiredWithout) Run(in RunInput) error { required = false array = strings.Split(in.RulePattern, ",") foundValue interface{} + dataMap = in.Data.Map() ) + for i := 0; i < len(array); i++ { - _, foundValue = gutil.MapPossibleItemByKey(in.Data.Map(), array[i]) + _, foundValue = gutil.MapPossibleItemByKey(dataMap, array[i]) if empty.IsEmpty(foundValue) { required = true break diff --git a/util/gvalid/internal/builtin/builtin_required_without_all.go b/util/gvalid/internal/builtin/builtin_required_without_all.go index ef62b4293..e55101266 100644 --- a/util/gvalid/internal/builtin/builtin_required_without_all.go +++ b/util/gvalid/internal/builtin/builtin_required_without_all.go @@ -38,9 +38,11 @@ func (r RuleRequiredWithoutAll) Run(in RunInput) error { required = true array = strings.Split(in.RulePattern, ",") foundValue interface{} + dataMap = in.Data.Map() ) + for i := 0; i < len(array); i++ { - _, foundValue = gutil.MapPossibleItemByKey(in.Data.Map(), array[i]) + _, foundValue = gutil.MapPossibleItemByKey(dataMap, array[i]) if !empty.IsEmpty(foundValue) { required = false break