ofirbt
ofirbt

Reputation: 1886

case insensitive regex

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

Answers (3)

Jake
Jake

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

Hans Kesting
Hans Kesting

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

user585756
user585756

Reputation:

Well, this would work.

^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4}$

Upvotes: 6

Related Questions