From 6025f738e0a1d7f5a000788ac4ec5b66c9939766 Mon Sep 17 00:00:00 2001 From: "Ora G. Walters" Date: Fri, 22 Mar 2024 02:02:12 -0500 Subject: [PATCH 1/3] Fix needlessly restrictive email validation regex The Regex used for emails currently excludes some valid emails such as mine (ora@mixedmedia.studio, a 5 character TLD). I'm proposing an altogether less restrictive Regex syntax though there are other ways of validating an email address that are more correct. See: https://stackoverflow.com/a/1903368/2444477 --- src/PopForums/Extensions/Strings.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/PopForums/Extensions/Strings.cs b/src/PopForums/Extensions/Strings.cs index 749e5b8e..3274eed5 100644 --- a/src/PopForums/Extensions/Strings.cs +++ b/src/PopForums/Extensions/Strings.cs @@ -44,7 +44,7 @@ public static string GetMD5Hash(this string text, Guid salt) public static bool IsEmailAddress(this string text) { - return Regex.IsMatch(text, @"^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$", RegexOptions.IgnoreCase); + return Regex.IsMatch(text, @"^.+@.+\..+$", RegexOptions.IgnoreCase); } public static string ToUrlName(this string text) @@ -87,4 +87,4 @@ public static string Trimmer(this string stringToTrim, int maxLength) return stringToTrim.Substring(0, maxLength - 13) + "..." + stringToTrim.Substring(stringToTrim.Length - 10, 10); } -} \ No newline at end of file +} From 2fa284da283e1c3a8f136fdf6e6969fa6b37a45e Mon Sep 17 00:00:00 2001 From: Ora Walters Date: Fri, 22 Mar 2024 13:47:45 -0500 Subject: [PATCH 2/3] Fix email tests for new regex --- src/PopForums.Test/Extensions/StringTests.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/PopForums.Test/Extensions/StringTests.cs b/src/PopForums.Test/Extensions/StringTests.cs index 5a59e664..2e863d99 100644 --- a/src/PopForums.Test/Extensions/StringTests.cs +++ b/src/PopForums.Test/Extensions/StringTests.cs @@ -24,16 +24,16 @@ public void IsEmailTest() Assert.True("obama@whitehouse.gov".IsEmailAddress()); Assert.True("a_b@c.net".IsEmailAddress()); Assert.True("a.b@site.co.uk".IsEmailAddress()); + Assert.True("ora@mixedmedia.studio".IsEmailAddress()); + Assert.True("mason@日本.com".IsEmailAddress()); } [Fact] public void IsNoteEmailTest() { Assert.False("a@c".IsEmailAddress()); - Assert.False("a a@c.com".IsEmailAddress()); - Assert.False("aa@c a.com".IsEmailAddress()); - Assert.False("a!a@c.com".IsEmailAddress()); - Assert.False("aa@coishd!iwe.com".IsEmailAddress()); + Assert.False("abc@examplecom".IsEmailAddress()); + Assert.False("ora.mixedmedia.studio".IsEmailAddress()); } [Fact] From 553cb7c9c75854d239c052ab0eb9865e7e68ea39 Mon Sep 17 00:00:00 2001 From: Ora Walters Date: Fri, 22 Mar 2024 15:21:36 -0500 Subject: [PATCH 3/3] Disallow special characters in domain names as well as whitespace characters in local names --- src/PopForums.Test/Extensions/StringTests.cs | 4 +++- src/PopForums/Extensions/Strings.cs | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/PopForums.Test/Extensions/StringTests.cs b/src/PopForums.Test/Extensions/StringTests.cs index 2e863d99..a1877783 100644 --- a/src/PopForums.Test/Extensions/StringTests.cs +++ b/src/PopForums.Test/Extensions/StringTests.cs @@ -25,7 +25,6 @@ public void IsEmailTest() Assert.True("a_b@c.net".IsEmailAddress()); Assert.True("a.b@site.co.uk".IsEmailAddress()); Assert.True("ora@mixedmedia.studio".IsEmailAddress()); - Assert.True("mason@日本.com".IsEmailAddress()); } [Fact] @@ -34,6 +33,9 @@ public void IsNoteEmailTest() Assert.False("a@c".IsEmailAddress()); Assert.False("abc@examplecom".IsEmailAddress()); Assert.False("ora.mixedmedia.studio".IsEmailAddress()); + Assert.False("a a@c.com".IsEmailAddress()); + Assert.False("aa@c a.com".IsEmailAddress()); + Assert.False("aa@coishd!iwe.com".IsEmailAddress()); } [Fact] diff --git a/src/PopForums/Extensions/Strings.cs b/src/PopForums/Extensions/Strings.cs index 3274eed5..ea224b50 100644 --- a/src/PopForums/Extensions/Strings.cs +++ b/src/PopForums/Extensions/Strings.cs @@ -44,7 +44,7 @@ public static string GetMD5Hash(this string text, Guid salt) public static bool IsEmailAddress(this string text) { - return Regex.IsMatch(text, @"^.+@.+\..+$", RegexOptions.IgnoreCase); + return Regex.IsMatch(text, @"^\S+?@([a-z0-9\-\.])+?\.([a-z0-9\-\.])+$", RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture); } public static string ToUrlName(this string text)