2011年9月23日金曜日

簡易的メールアドレスチェックC# 正規表現. easy mail address validation checker in C# with regular expression.

文字列がメールアドレスとして正しいか判定 (正規表現を使用)
(RFCの連続メールアドレスまでは準拠しません。1つのメールアドレスに対応してます。)

以下の形式に対応します。
1. user123@example456.co.jp メールアドレスのみの形式 ( mail address only)
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;
            }
        }
    }
}

0 件のコメント:

コメントを投稿