電子メールアドレスを検証することを目的とするさまざまなプログラミング言語の多数の正規表現を見てきました。問題の表現は特定のケースでは機能せず、厳しすぎるか寛容すぎるというコメントを多く見ました。私が探しているのは、決定的なC#コードで使用できる正規表現です。
私が見つけた最高のものはこれです
^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$
もっと良いものはありますか?
メールアドレス:RFC 2822形式
通常のメールアドレスと一致します。トップレベルドメインをチェックしません。
「大文字と小文字を区別しない」オプションをオンにする必要があります。
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
使用法 :
bool isEmail = Regex.IsMatch(emailString, @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z", RegexOptions.IgnoreCase);
最初のオプション(スローキャッチのために悪いが、MSはあなたのために動作します):
bool IsValidEmail(string email)
{
try {
var mail = new System.Net.Mail.MailAddress(email);
return true;
}
catch {
return false;
}
}
2番目のオプションは RFCを読むまで電子メールアドレスを検証する方法を知っていました および RFC仕様
このC#関数は、正規表現を使用して、渡された電子メールアドレスが構文的に有効かどうかを評価します。
public static bool isValidEmail(string inputEmail)
{
string strRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
@"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
@".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
Regex re = new Regex(strRegex);
if (re.IsMatch(inputEmail))
return (true);
else
return (false);
}
2019の回答を更新しました。
正規表現オブジェクトは、マッチング関数に対してスレッドセーフです。それを知っていて、いくつかのパフォーマンスオプションや文化的/言語的な問題があるので、この簡単なソリューションを提案します。
public static Regex _regex = new Regex(
@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$",
RegexOptions.CultureInvariant | RegexOptions.Singleline);
public static bool IsValidEmailFormat(string emailInput)
{
return _regex.IsMatch(emailInput);
}
正規表現の代替構成:
public static Regex _regex = new Regex(
@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$",
RegexOptions.CultureInvariant | RegexOptions.Compiled);
コンパイルは、たとえば本の構文解析など、大きな文字列の一致でのみ高速になることがわかりました。単純なメールマッチングは、Regexに解釈させるだけで高速です。
RegExを使用した検証の前後に、追加の検証のためにnew EmailAddressAttribute().IsValid(emailTxt)
を提案したいと思います。
EmailAddressAttribute
はSystem.ComponentModel.DataAnnotations namespace
の一部であることに注意してください。