0

ポータブル アプリケーション、特にモダン UI アプリケーションで電子メールを検証するための適切なアプローチは何ですか? 私は車輪を再発明する必要はなく、正規表現の壁を使用することにあまり熱心ではありません。

私の個人的な問題は、サーバー側で検証を行っていることですが、クライアントで検証を行いたいと考えています。

移植性のないアプリの推奨される方法は次のとおりです: 方法: 文字列が有効な電子メール形式であることを確認 する これは私のお気に入りの解決策です。私の個人的なケースでは、クライアントを通過する無効な電子メール アドレスを受け入れることができるからです。DomainMapper()

別のアプローチはSystem.Net.MailAddress、移植可能なコンテキストでもサポートされていない から例外をキャッチすることです。(MS推奨の方法だと思います)

誰かが他の適切な解決策を知っていますか? リンクされた方法 (sans DomainMapper) が最適ですか? もしそうなら、移植可能なコンテキストで DomainMapper を再実装する方法はありますか?

4

1 に答える 1

0

Ascii 文字に変換することで、より簡単な方法で Unicode を処理するだけです。そうすれば、必要なのはSystem.Text.RegularExpressionsポータブルとして利用できるものだけです。

これは、MSページで指定されたすべてのテストに合格し、許容度が低いとは想像できません。とにかくサーバー側で実際の検証を行う必要があるため、大したことではない悪いメールが送信された場合。

public static class RegexUtilities
{
    /// <summary>
    /// Portible version of http://msdn.microsoft.com/en-us/library/01escwtf%28v=vs.110%29.aspx
    /// More permissive validation for client side.
    /// </summary>
    /// <param name="strIn"></param>
    /// <returns></returns>
    public static bool IsValidEmail(string strIn)
    {
        if (String.IsNullOrEmpty(strIn))    
            return false;

        //Replace all unicode chars with ascii "A"
        strIn = Regex.Replace(strIn, "[^\x0d\x0a\x20-\x7e\t]", "A");

        // Return true if strIn is in valid e-mail format. 
        try
        {
            return Regex.IsMatch(strIn,
                  @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
                  @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$",
                  RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));
        }
        catch (RegexMatchTimeoutException)
        {
            return false;
        }
    }
}
于 2014-07-10T09:39:54.543 に答える