2011-01-26 22 views
4

C#で正規表現を使用して電子メールアドレスを検証したいとします。大文字と小文字を区別しない正規表現

私はこのパターンを使用しています:

^[A-Z0-9._%-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$ 

このパターンは大文字と一致しました。例:

"[email protected]" - >はfalseを返します。 "[email protected]" - >がtrueを返します。

明らかに、最初の例もtrueを返すようにしたいと思います。

注:RegexOptions.IgnoreCaseフラグは使用しないでください。

最初の例と一致するようにパターン自体を変更したいと思います。私はパターンの最後に「/ i」を付け加えることができると思いますが、それはうまくいかないようです。 私は最初に "?i"を使用しないことを好みます。

これをどのように達成できますか?

(私のために全体のパターンを書き直すことができたら、それは素晴らしいでしょう!)。

ありがとうございました。

+4

方法であるPCREの 'i'修飾子任意の.NETの' RegexOptions.IgnoreCase'よりも良いですか?入力するのが22文字少ないためですか? – BoltClock

+0

。 []ブロックで、任意の文字エスケープと一致させたくない場合は、¥ –

+1

@Johann文字は[]ブロック内でエスケープする必要はありません(少なくとも.NET正規表現の構文では)。 –

答えて

14

[A-Z]の代わりに[A-Za-z]を使用してください。

注意してください:あなたの正規表現に従って禁止されている.travelのようなトップレベルドメインで終わる電子メールアドレスがあります。あなただけ使用することができます

3

これはうまくいくはずです。

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

RegexOptions.IgnoreCaseを設定^(?i)[A-Z0-9._%-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$

お知らせ(?i)を、あなたは文句を言わないこの方法は、正規表現内の任意の文字クラスを変更したり、コードが使用されている場所を変更する必要があります。

例(F#インタラクティブで):

Regex.Match("[email protected]", @"^(?i)[A-Z0-9._%-][email protected][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]";} 
+0

私は気に入っています - 'i'修飾子を使って' .ignoreCase'を設定する方があなたのコードで '.ignoreCase' 'i'を使うと、あなたの正規表現が設定ファイルやデータベースに格納されている場合に簡単に変更できます。 – edhubbell

関連する問題