From 2b79753438bd244cd24137bf79151270dbaf106d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Do=C4=9Fan=20Can=20Bak=C4=B1r?= Date: Tue, 25 Jun 2024 12:14:21 +0300 Subject: [PATCH 1/2] add `stringsutil.ContainsAllI` func --- strings/stringsutil.go | 10 ++++++++++ strings/stringsutil_test.go | 17 +++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/strings/stringsutil.go b/strings/stringsutil.go index 4b71999..109d6ca 100644 --- a/strings/stringsutil.go +++ b/strings/stringsutil.go @@ -312,3 +312,13 @@ func ContainsAll(s string, ss ...string) bool { } return true } + +// ContainsAllI returns true if s contains all specified substrings (case-insensitive). +func ContainsAllI(s string, ss ...string) bool { + for _, sub := range ss { + if !strings.Contains(strings.ToLower(s), strings.ToLower(sub)) { + return false + } + } + return true +} diff --git a/strings/stringsutil_test.go b/strings/stringsutil_test.go index c563fc0..48a1756 100644 --- a/strings/stringsutil_test.go +++ b/strings/stringsutil_test.go @@ -407,3 +407,20 @@ func TestContainsAll(t *testing.T) { require.Equal(t, test.result, res) } } + +func TestContainsAllI(t *testing.T) { + tests := []struct { + s string + ss []string + result bool + }{ + {"abcdefg", []string{"A", "b"}, true}, + {"abcdefg", []string{"A", "z"}, false}, + {"abcdefg", []string{"A", "b", "c", "d", "e", "f", "g"}, true}, + {"abcdefg", []string{"A", "b", "c", "d", "e", "f", "g", "z"}, false}, + } + for _, test := range tests { + res := ContainsAllI(test.s, test.ss...) + require.Equal(t, test.result, res) + } +} From ba95de83edef2b71d61665421e16587363f5baa0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Do=C4=9Fan=20Can=20Bak=C4=B1r?= Date: Tue, 25 Jun 2024 13:09:29 +0300 Subject: [PATCH 2/2] minor --- strings/stringsutil.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/strings/stringsutil.go b/strings/stringsutil.go index 109d6ca..d7cf397 100644 --- a/strings/stringsutil.go +++ b/strings/stringsutil.go @@ -315,8 +315,9 @@ func ContainsAll(s string, ss ...string) bool { // ContainsAllI returns true if s contains all specified substrings (case-insensitive). func ContainsAllI(s string, ss ...string) bool { + lowerS := strings.ToLower(s) for _, sub := range ss { - if !strings.Contains(strings.ToLower(s), strings.ToLower(sub)) { + if !strings.Contains(lowerS, strings.ToLower(sub)) { return false } }