(RFCの連続メールアドレスまでは準拠しません。1つのメールアドレスに対応してます。)
以下の形式に対応します。
1. user123@example456.co.jp メールアドレスのみの形式 ( mail address only)
2. hoge ホゲ ユーザ名+<メールアドレス> 形式 ( name + )
2. hoge ホゲ ユーザ名+<メールアドレス> 形式 ( name + )
// メールアドレス正当性チェックメソッド
public static bool IsValidMailAddrString(string mailAddrStr)
{
if (mailAddrStr.Contains("<")) {
// name + <mail addr>;
//
// 正規表現を設定。
string regPattern = @"^\s*[^<]*\s*[<]\s*[^@\s]+[@]([^.\s]+[.]){1,}[^.\s]+\s*[>]\s*$";
return System.Text.RegularExpressions.Regex.IsMatch(mailAddrStr, regPattern);
}
else
{
// mail addr only
// user@example.co.jp
string regPattern = @"^[^@\s]+[@]([^.\s]+[.]){1,}[^.\s]+\s*$";
return System.Text.RegularExpressions.Regex.IsMatch(mailAddrStr, regPattern);
}
}
/// この関数を使う場合は以下のようにある程度許容性を持たせてくださいね。
// TextBox
private void txtMailText_Validating(object sender, CancelEventArgs e)
{
// text box ?
TextBox tb;
if (sender.GetType() == typeof(TextBox))
{
tb = (TextBox)sender;
if (tb.Text == "") return; // ignore empty string
// メールアドレス妥当性チェック
if (!IsValidMailAddrString(tb.Text))
{
// if it doesnt look like mail addr
if (MessageBox.Show("メールアドレス形式が不正のようです。このまま使用しますか?", "Mail Address Validation", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.No)
{
e.Cancel = true;
}
}
}
}