From 6a7923321652423a7c5b5016eb4d542737aae513 Mon Sep 17 00:00:00 2001 From: Brian Hendrickson Date: Thu, 19 Aug 2021 17:01:11 +1200 Subject: [PATCH] Fix case insensitivity in ContainsProfanity --- ProfanityFilter.Tests.Unit/ProfanityTests.cs | 9 +++++++++ ProfanityFilter/ProfanityFilter/ProfanityFilter.cs | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/ProfanityFilter.Tests.Unit/ProfanityTests.cs b/ProfanityFilter.Tests.Unit/ProfanityTests.cs index 33c48f2..04c5bba 100644 --- a/ProfanityFilter.Tests.Unit/ProfanityTests.cs +++ b/ProfanityFilter.Tests.Unit/ProfanityTests.cs @@ -898,5 +898,14 @@ public void ContainsProfanityReturnsTrueWhenProfanityIsADollarDollar() Assert.IsTrue(result); } + + [TestMethod] + public void ContainsProfanityReturnsTrueWhenProfanityIsVariableCase() + { + var filter = new ProfanityFilter(); + var result = filter.ContainsProfanity("Fuck"); + + Assert.IsTrue(result); + } } } \ No newline at end of file diff --git a/ProfanityFilter/ProfanityFilter/ProfanityFilter.cs b/ProfanityFilter/ProfanityFilter/ProfanityFilter.cs index 3af0bc6..1385e15 100644 --- a/ProfanityFilter/ProfanityFilter/ProfanityFilter.cs +++ b/ProfanityFilter/ProfanityFilter/ProfanityFilter.cs @@ -272,9 +272,9 @@ public bool ContainsProfanity(string term) return false; } - Regex regex = new Regex(string.Format(@"(?:{0})", string.Join("|", potentialProfanities).Replace("$", "\\$"), RegexOptions.IgnoreCase)); + string regexPattern = string.Format(@"(?:{0})", string.Join("|", potentialProfanities).Replace("$", "\\$")); - foreach (Match profanity in regex.Matches(term)) + foreach (Match profanity in Regex.Matches(term, regexPattern, RegexOptions.IgnoreCase)) { // if any matches are found and aren't in the allowed list, we can return true here without checking further if (!AllowList.Contains(profanity.Value.ToLower(CultureInfo.InvariantCulture)))