Reputation: 1886
I want to validate an email address with Regex in C#.
I'm using this pattern:
^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$
This pattern only matches upper case letters. For example:
"[email protected]" --> returns false. "[email protected]" --> returns true.
I obviously would like that the first example will also return true.
NOTE: I DON'T want to use the RegexOptions.IgnoreCase
flag.
I would like to change the pattern itself to match the first example. I think that I can add a "/i" in the end of the pattern or something like this but it doesn't seems to work. I prefer not to use the "?i" in the beginning as well.
How can i achieve this?
(If you could rewrite the whole pattern for me, it would be great!).
Thanks.
Upvotes: 11
Views: 52350
Reputation: 3457
You can just use: ^(?i)[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$
Notice the (?i)
which sets the RegexOptions.IgnoreCase
, this way you wont have to modify any character classes in the regex or modify where the code is used.
Example (In F# interactive):
Regex.Match("[email protected]", @"^(?i)[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$");;
val it : Match = [email protected] {Captures = seq [...];
Groups = seq [...];
Index = 0;
Length = 13;
Success = true;
Value = "[email protected]";}
Upvotes: 19
Reputation: 39265
Instead of just [A-Z], use [A-Za-z].
But watch out: there are e-mail addresses that end in top-level domains like .travel, that are forbidden according to your regex!
Upvotes: 24
Reputation:
Well, this would work.
^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4}$
Upvotes: 6