正規表現のメール検証


215

私はこれを使います

@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"

メールを検証する正規表現

([\w\.\-]+)-これは第1レベルドメイン用(多くの文字と数字、ポイントとハイフンも)

([\w\-]+)-これは第2レベルドメイン用です

((\.(\w){2,3})+)-これは、ポイントと2または3を含む他のレベルドメイン(3から無限大まで)用ですリテラル

この正規表現の何が問題になっていますか?

編集:「something@someth.ing」メールと一致しません


1
RFC 5321および5322 --nothingで指定されているように、有効な文字を含めないこと以外は。
ブラッドクリスティー


何が悪いのか教えていただければ、他の人が問題の修正を手伝ってくれると思います
Uwe Keim、2011年

10
問題があります->「正規表現」だと思います->現在、2つの問題があります;-)
Jakub Konecki

1
あなたの正規表現についての単なるコメント。これらの新しい.amsterdamで、.INFO、他のドメインは、正規表現は次のようになります@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,})+)$""
トンSnoei

回答:


371

.museumのようなTLD はこの方法では一致せず、他にもいくつかの長いTLDがあります。また、Microsoft がメモでここで説明しているように、MailAddressクラスを使用してメールアドレスを検証することもできます。

正規表現を使用して電子メールアドレスを検証する代わりに、System.Net.Mail.MailAddressクラスを使用できます。メールアドレスが有効かどうかを判断するには、メールアドレスをMailAddress.MailAddress(String)クラスのコンストラクターに渡します。

public bool IsValid(string emailaddress)
{
    try
    {
        MailAddress m = new MailAddress(emailaddress);

        return true;
    }
    catch (FormatException)
    {
        return false;
    }
}

これにより、正規表現を書く(または他の誰かの正規表現を理解する)必要がないため、頭痛の種を大幅に節約できます。


63
これは二重ドット「..」もインラインスペース「。」もキャッチしませんでした。代わりに正規表現を使用します
Benny Skogberg

33
これにもかかわらず、人気のある答えです。不正解です。「Abc。@ example.com」、「Abc..123 @ example.com」の少なくとも2つの無効な形式をキャッチできません
sean717

12
@ sean717:RFCやリンクを参照してください。あなたの例はおそらく現実の世界では機能しないでしょうが、それがそれらを無効にすることはありません。
Dan Pichelman、2012

13
動作しているかどうかに関係なく、try catchを使用して入力を検証することはお勧めできません。正規表現は間違いなく良い方法です。
MRT

159
-1不良コード。例外をキャッチすることは、フィールドを検証する方法ではありません。
ken2k 2013年

99

@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"うまくいくと思います。
次のように書く必要があります

string email = txtemail.Text;
Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$");
Match match = regex.Match(email);
if (match.Success)
    Response.Write(email + " is correct");
else
    Response.Write(email + " is incorrect");

これは次の場合に失敗することに注意してください。

  1. @シンボルの後にサブドメインがあります。

  2. 次のように、長さが3より大きいTLDを使用している .info


2
test@-online.comを有効として返します。無効である必要があります。
Mathias F

7
現在発行されている新しいTLDでは3文字を超えるTLDを使用できるため、これは失敗すると思います。
AaronLS 2013

この正規表現では、「somename@gmail.com.in.in.in.in」を有効にできます。
好奇心2014年

14
gmail.com.in.in.in.inは完全に有効なドメイン名なので、許可してはならない理由がわかりません。
larsw

@larswに同意し、正規表現を使用しないでください
Boris Sokolov

68

使用しているメールアドレスを確認する式があります。

上記のどれも私のように短くも正確でもなかったので、私はそれをここに投稿すると思いました。

@"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*"
+ "@"
+ @"((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$";

詳細については、こちらをお読みください:C#–メールの正規表現

また、これは電子メールが実際に存在するかどうかではなく、電子メール構文に基づいてRFCの有効性をチェックします。電子メールが実際に存在することをテストする唯一の方法は、送信して電子メールを送信し、リンクをクリックするかトークンを入力して、ユーザーが電子メールを受信したことを確認することです。

次に、Mailinator.comなどの使い捨てドメインがあります。これは、電子メールが使い捨てドメインからのものかどうかを確認するためのものではありません。


それは私が探していたものです-ありがとう!二重ドット「..」と空白「。」の両方を取ります。
Benny Skogberg、2012

5
正規表現メール- C#:私は、ユニットテストを持っている私の正規表現のプロジェクトを更新し、私もバグのカップルを固定rhyous.com/2010/06/15/csharp-email-regular-expressionを
Rhyous

新しいTLDでは、3行目の[a-zA-Z] {2,4}を{0}に置き換えてから、string.format(pattern、pipeSeparatedAllowedTlds)を実行する必要があります。ここで、pipeSeparatedAllowedTldsは、このファイルを反復処理する:data.iana.org/TLD/tlds-alpha-by-domain.txt
Rhyous

12
Parth。メールで違反しているRFCルールを教えてください。何を推測するからです。RFCによれば、有効です!!!! URL in.inを購入した場合、このメールアドレスを作成できます。理解する?
Rhyous、2014年

2
実際、github.com / rhyous / EmailRegExで既にgithubで更新しているようです。ただし、\ wにはアンダースコアが含まれる可能性があるため、正確にするために編集する必要がある場合があります。
Rhyous、

36

そのためのMSDNで素晴らしいドキュメントを見つけました。

方法:文字列が有効な電子メール形式である ことを確認するhttp://msdn.microsoft.com/en-us/library/01escwtf.aspx(このコードがインターネットドメイン名での非ASCII文字の使用もサポートしていることを確認してください。 )

.Net 2.0 / 3.0と.Net 3.5以降の2つの実装があります。
2.0 / 3.0バージョンは次のとおりです。

bool IsValidEmail(string strIn)
{
    // Return true if strIn is in valid e-mail format.
    return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"); 
}

このメソッドに対する私のテストは以下を与えます:

Invalid: @majjf.com
Invalid: A@b@c@example.com
Invalid: Abc.example.com
Valid: j..s@proseware.com
Valid: j.@server1.proseware.com
Invalid: js*@proseware.com
Invalid: js@proseware..com
Valid: ma...ma@jjf.co
Valid: ma.@jjf.com
Invalid: ma@@jjf.com
Invalid: ma@jjf.
Invalid: ma@jjf..com
Invalid: ma@jjf.c
Invalid: ma_@jjf
Invalid: ma_@jjf.
Valid: ma_@jjf.com
Invalid: -------
Valid: 12@hostname.com
Valid: d.j@server1.proseware.com
Valid: david.jones@proseware.com
Valid: j.s@server1.proseware.com
Invalid: j@proseware.com9
Valid: j_9@[129.126.118.1]
Valid: jones@ms1.proseware.com
Invalid: js#internal@proseware.com
Invalid: js@proseware.com9
Invalid: js@proseware.com9
Valid: m.a@hostname.co
Valid: m_a1a@hostname.com
Valid: ma.h.saraf.onemore@hostname.com.edu
Valid: ma@hostname.com
Invalid: ma@hostname.comcom
Invalid: MA@hostname.coMCom
Valid: ma12@hostname.com
Valid: ma-a.aa@hostname.com.edu
Valid: ma-a@hostname.com
Valid: ma-a@hostname.com.edu
Valid: ma-a@1hostname.com
Valid: ma.a@1hostname.com
Valid: ma@1hostname.com

1
一致しません[me]@whatever.museum
Toto

無効:Abc.example.comはい、正しく機能しますが、これは「toms.email。@ gmail.com」です。動作しません
トムスティッケル2013

1
プラス記号を追加する必要がありました: `@" ^([\ w-\。+] +)@(([[0-9] {1,3} \。[0-9] {1,3} \。 [0-9] {1,3} \。)|(([\ w-] + \。)+))([a-zA-Z] {2,4} | [0-9] {1、 3})(]?)$ "` 11残りの文字] Googleとホットメールのエイリアスでは、@記号の前の最初のセクションでプラス記号を使用できます。
Henk J Meulekamp 2013

これは上記と同じです。「somename@gmail.com.in.in.in」を有効なメールアドレスとして許可しています... !!
好奇心2014年

9
@ParthTrivediなぜsomename@gmail.com.in.in.in有効なメールアドレスではないと主張するのですか?
Ivaylo Slavov、2015

15

次のコードは、github上のMicrosoftのデータアノテーション実装に基づいており、電子メールの最も完全な検証だと思います。

public static Regex EmailValidation()
{
    const string pattern = @"^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$";
    const RegexOptions options = RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture;

    // Set explicit regex match timeout, sufficient enough for email parsing
    // Unless the global REGEX_DEFAULT_MATCH_TIMEOUT is already set
    TimeSpan matchTimeout = TimeSpan.FromSeconds(2);

    try
    {
        if (AppDomain.CurrentDomain.GetData("REGEX_DEFAULT_MATCH_TIMEOUT") == null)
        {
            return new Regex(pattern, options, matchTimeout);
        }
    }
    catch
    {
        // Fallback on error
    }

    // Legacy fallback (without explicit match timeout)
    return new Regex(pattern, options);
}

1
これをプロのソースから取得できてうれしいです(もちろん他のものに対しては何もありません); 感謝。
Nicholas Petersen

1
RFC 5321と5322を検証しているように見えるため、これは最良の正規表現になるはずです。一部の単体テストが欠落しています。
ToXinE

電子メールアドレスの末尾のドットをキャプチャしません。
Sellorio

12

これはRFC 5321および5322のすべての要件を満たしているわけではありませんが、次の定義で機能します。

@"^([0-9a-zA-Z]([\+\-_\.][0-9a-zA-Z]+)*)+"@(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]*\.)+[a-zA-Z0-9]{2,17})$";

以下はコードです

const String pattern =
   @"^([0-9a-zA-Z]" + //Start with a digit or alphabetical
   @"([\+\-_\.][0-9a-zA-Z]+)*" + // No continuous or ending +-_. chars in email
   @")+" +
   @"@(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]*\.)+[a-zA-Z0-9]{2,17})$";

var validEmails = new[] {
        "ma@hostname.com",
        "ma@hostname.comcom",
        "MA@hostname.coMCom",
        "m.a@hostname.co",
        "m_a1a@hostname.com",
        "ma-a@hostname.com",
        "ma-a@hostname.com.edu",
        "ma-a.aa@hostname.com.edu",
        "ma.h.saraf.onemore@hostname.com.edu",
        "ma12@hostname.com",
        "12@hostname.com",
};
var invalidEmails = new[] {
        "Abc.example.com",     // No `@`
        "A@b@c@example.com",   // multiple `@`
        "ma...ma@jjf.co",      // continuous multiple dots in name
        "ma@jjf.c",            // only 1 char in extension
        "ma@jjf..com",         // continuous multiple dots in domain
        "ma@@jjf.com",         // continuous multiple `@`
        "@majjf.com",          // nothing before `@`
        "ma.@jjf.com",         // nothing after `.`
        "ma_@jjf.com",         // nothing after `_`
        "ma_@jjf",             // no domain extension 
        "ma_@jjf.",            // nothing after `_` and .
        "ma@jjf.",             // nothing after `.`
    };

foreach (var str in validEmails)
{
    Console.WriteLine("{0} - {1} ", str, Regex.IsMatch(str, pattern));
}
foreach (var str in invalidEmails)
{
    Console.WriteLine("{0} - {1} ", str, Regex.IsMatch(str, pattern));
}

1
この表現は有効なアドレスと一致しません!#$%&'*+-/=?^_。{|}〜@ example.com`またはこれDörte@Sörensen.example.com
TS

7

最高のメール検証正規表現

[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);

6

サイズを試してみてください:

public static bool IsValidEmailAddress(this string s)
{
    var regex = new Regex(@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?");
    return regex.IsMatch(s);
}

5

これを試してください、それは私のために働いています:

public bool IsValidEmailAddress(string s)
{
    if (string.IsNullOrEmpty(s))
        return false;
    else
    {
        var regex = new Regex(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
        return regex.IsMatch(s) && !s.EndsWith(".");
    }
}

5

この正規表現は完全に機能します。

bool IsValidEmail(string email)
{
    return Regex.IsMatch(email, @"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*@((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))\z");
}

4

これはコメントで他の人が言及した無効なメールを防ぎます:

Abc.@example.com
Abc..123@example.com
name@hotmail
toms.email.@gmail.com
test@-online.com

また、二重ドットのあるメールも防止します。

hello..world@example..com

できる限り多くの無効なメールアドレスでテストしてみてください。

using System.Text.RegularExpressions;

public static bool IsValidEmail(string email)
{
    return Regex.IsMatch(email, @"\A[a-z0-9]+([-._][a-z0-9]+)*@([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,4}\z")
        && Regex.IsMatch(email, @"^(?=.{1,64}@.{4,64}$)(?=.{6,100}$).*");
}

C#で正規表現を使用してメールアドレスを検証するをご覧ください。


これは、無効なメールアドレスすべてに対してfalseを返します。残念ながら、多くの有効なメールアドレスに対してもfalseを返します。
マーク・

4

EF6属性ベースの電子メール検証を使用しないのはなぜですか?

上記を見るとわかるように、電子メールのRegex検証には常にいくつかの穴があります。EF6データアノテーションを使用している場合は、EmailAddressデータアノテーション属性を使用して、信頼性が高く強力な電子メール検証を簡単に実現できます。電子メール入力フィールドでモバイルデバイス固有の正規表現エラーが発生したときに、以前電子メールに使用した正規表現検証を削除する必要がありました。データ注釈属性が電子メールの検証に使用されると、モバイルでの問題が解決されました。

public class LoginViewModel
{
    [EmailAddress(ErrorMessage = "The email format is not valid")]
    public string Email{ get; set; }


1
public static bool ValidateEmail(string str)
{                       
     return Regex.IsMatch(str, @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
}

上記のコードを使用して、メールアドレスを検証します。


1
   public bool VailidateEntriesForAccount()
    {
       if (!(txtMailId.Text.Trim() == string.Empty))
        {
            if (!IsEmail(txtMailId.Text))
            {
                Logger.Debug("Entered invalid Email ID's");
                MessageBox.Show("Please enter valid Email Id's" );
                txtMailId.Focus();
                return false;
            }
        }
     }
   private bool IsEmail(string strEmail)
    {
        Regex validateEmail = new Regex("^[\\W]*([\\w+\\-.%]+@[\\w\\-.]+\\.[A-Za-z] {2,4}[\\W]*,{1}[\\W]*)*([\\w+\\-.%]+@[\\w\\-.]+\\.[A-Za-z]{2,4})[\\W]*$");
        return validateEmail.IsMatch(strEmail);
    }

このコードは質問に答えることがありますが、このコードが質問に答える理由および/または方法に関する追加のコンテキストを提供すると、長期的な価値が向上します
AStopher


1

電子メールに関する世界中のほぼすべての要件に対応する電子メール検証ツールを作成するために、多くの試みが行われてきました。

あなたが呼び出すことができる拡張メソッド:

myEmailString.IsValidEmailAddress();

呼び出すことで取得できる正規表現パターン文字列:

var myPattern = Regex.EmailPattern;

コード(主にコメント):

    /// <summary>
    /// Validates the string is an Email Address...
    /// </summary>
    /// <param name="emailAddress"></param>
    /// <returns>bool</returns>
    public static bool IsValidEmailAddress(this string emailAddress)
    {
        var valid = true;
        var isnotblank = false;

        var email = emailAddress.Trim();
        if (email.Length > 0)
        {
            // Email Address Cannot start with period.
            // Name portion must be at least one character
            // In the Name, valid characters are:  a-z 0-9 ! # _ % & ' " = ` { } ~ - + * ? ^ | / $
            // Cannot have period immediately before @ sign.
            // Cannot have two @ symbols
            // In the domain, valid characters are: a-z 0-9 - .
            // Domain cannot start with a period or dash
            // Domain name must be 2 characters.. not more than 256 characters
            // Domain cannot end with a period or dash.
            // Domain must contain a period
            isnotblank = true;
            valid = Regex.IsMatch(email, Regex.EmailPattern, RegexOptions.IgnoreCase) &&
                !email.StartsWith("-") &&
                !email.StartsWith(".") &&
                !email.EndsWith(".") && 
                !email.Contains("..") &&
                !email.Contains(".@") &&
                !email.Contains("@.");
        }

        return (valid && isnotblank);
    }

    /// <summary>
    /// Validates the string is an Email Address or a delimited string of email addresses...
    /// </summary>
    /// <param name="emailAddress"></param>
    /// <returns>bool</returns>
    public static bool IsValidEmailAddressDelimitedList(this string emailAddress, char delimiter = ';')
    {
        var valid = true;
        var isnotblank = false;

        string[] emails = emailAddress.Split(delimiter);

        foreach (string e in emails)
        {
            var email = e.Trim();
            if (email.Length > 0 && valid) // if valid == false, no reason to continue checking
            {
                isnotblank = true;
                if (!email.IsValidEmailAddress())
                {
                    valid = false;
                }
            }
        }
        return (valid && isnotblank);
    }

    public class Regex
    {
        /// <summary>
        /// Set of Unicode Characters currently supported in the application for email, etc.
        /// </summary>
        public static readonly string UnicodeCharacters = "À-ÿ\p{L}\p{M}ÀàÂâÆæÇçÈèÉéÊêËëÎîÏïÔôŒœÙùÛûÜü«»€₣äÄöÖüÜß"; // German and French

        /// <summary>
        /// Set of Symbol Characters currently supported in the application for email, etc.
        /// Needed if a client side validator is being used.
        /// Not needed if validation is done server side.
        /// The difference is due to subtle differences in Regex engines.
        /// </summary>
        public static readonly string SymbolCharacters = @"!#%&'""=`{}~\.\-\+\*\?\^\|\/\$";

        /// <summary>
        /// Regular Expression string pattern used to match an email address.
        /// The following characters will be supported anywhere in the email address:
        /// ÀàÂâÆæÇçÈèÉéÊêËëÎîÏïÔôŒœÙùÛûÜü«»€₣äÄöÖüÜß[a - z][A - Z][0 - 9] _
        /// The following symbols will be supported in the first part of the email address(before the @ symbol):
        /// !#%&'"=`{}~.-+*?^|\/$
        /// Emails cannot start or end with periods,dashes or @.
        /// Emails cannot have two @ symbols.
        /// Emails must have an @ symbol followed later by a period.
        /// Emails cannot have a period before or after the @ symbol.
        /// </summary>
        public static readonly string EmailPattern = String.Format(
            @"^([\w{0}{2}])+@{1}[\w{0}]+([-.][\w{0}]+)*\.[\w{0}]+([-.][\w{0}]+)*$",                     //  @"^[{0}\w]+([-+.'][{0}\w]+)*@[{0}\w]+([-.][{0}\w]+)*\.[{0}\w]+([-.][{0}\w]+)*$",
            UnicodeCharacters,
            "{1}",
            SymbolCharacters
        );
    }

1

メールIDを検証するには、そのようなメソッドを作成して使用するだけです。

    public static bool IsValidEmail(string email)
    {
        var r = new Regex(@"^([0-9a-zA-Z]([-\.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$");
        return !String.IsNullOrEmpty(email) && r.IsMatch(email);
    }

これはTrue / Falseを返します。(有効/無効なメールID)


1

これはこれまでのところ、これに対する私のお気に入りのアプローチです。

public static class CommonExtensions
{
    public static bool IsValidEmail(this string thisEmail)
        => !string.IsNullOrWhiteSpace(thisEmail) &&
           new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$").IsMatch(thisEmail);
}

次に、作成した文字列拡張子を使用します。

if (!emailAsString.IsValidEmail()) throw new Exception("Invalid Email");

1

ちょうど私が知っているのIFそれは動作しません:)

public static bool isValidEmail(this string email)
{

    string[] mail = email.Split(new string[] { "@" }, StringSplitOptions.None);

    if (mail.Length != 2)
        return false;

    //check part before ...@

    if (mail[0].Length < 1)
        return false;

    System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"^[a-zA-Z0-9_\-\.]+$");
    if (!regex.IsMatch(mail[0]))
        return false;

    //check part after @...

    string[] domain = mail[1].Split(new string[] { "." }, StringSplitOptions.None);

    if (domain.Length < 2)
        return false;

    regex = new System.Text.RegularExpressions.Regex(@"^[a-zA-Z0-9_\-]+$");

    foreach (string d in domain)
    {
        if (!regex.IsMatch(d))
            return false;
    }

    //get TLD
    if (domain[domain.Length - 1].Length < 2)
        return false;

    return true;

}

1

この場合の正規表現を次に示します。

@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
                       @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
                       @".)+))([a-zA-Z]{2,6}|[0-9]{1,3})(\]?)$",

3つの部分があります。最後のものはおそらく必要なものです。特定の用語{2,6}は、最後のTLDの最小/最大長を示します。HTH


0

次のコードを試してください:

using System.Text.RegularExpressions;
if  (!Regex.IsMatch(txtEmail.Text, @"^[a-z,A-Z]{1,10}((-|.)\w+)*@\w+.\w{3}$"))
        MessageBox.Show("Not valid email.");

0

C#で正規表現メソッドを使用した文字列検索

正規表現でメールを検証する方法は?

string EmailPattern = @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";
if (Regex.IsMatch(Email, EmailPattern, RegexOptions.IgnoreCase))
{
    Console.WriteLine("Email: {0} is valid.", Email);
}
else
{
    Console.WriteLine("Email: {0} is not valid.", Email);
}

Reference String.Regex()メソッドを使用する


0

1

^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*@((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$

2

^(([^<>()[\]\\.,;:\s@\""]+(\.[^<>()[\]\\.,;:\s@\""]+)*)|(\"".+\""))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$

0

キャレットとドル記号が問題の一部だと思います。正規表現も少し変更する必要があります。次の@ "[:] +([\ w .-] +)@([\ w-。])+を使用します((。(\ w){2,3})+) "


結果Trim( ':')を使用する場合
ABMoharram

0

正規表現のメールパターン:

^(?:[\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`\\{\\|\\}\\~]+\\.)*[\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`\\{\\|\\}\\~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\\-](?!\\.)){0,61}[a-zA-Z0-9]?\\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\\[(?:(?:[01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\.){3}(?:[01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\]))$

0

私はRegex.IsMatch()を使用しています。

まず、次のステートメントを追加する必要があります。

using System.Text.RegularExpressions;

その後、メソッドは次のようになります。

private bool EmailValidation(string pEmail)
{
                 return Regex.IsMatch(pEmail,
                 @"^(?("")("".+?(?<!\\)""@)|(([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));
}

私のロジックのため、これはプライベートメソッドですが、「ユーティリティ」などの別のレイヤーに静的メソッドを配置して、必要な場所から呼び出すことができます。


0

完全な正規表現はありませんが、これはRFC5322の研究に基づいてかなり強力だと思います。C#の文字列補間を使用すると、非常にわかりやすいと思います。

const string atext = @"a-zA-Z\d!#\$%&'\*\+-/=\?\^_`\{\|\}~";
var localPart = $"[{atext}]+(\\.[{atext}]+)*";
var domain = $"[{atext}]+(\\.[{atext}]+)*";
Assert.That(() => EmailRegex = new Regex($"^{localPart}@{domain}$", Compiled), 
Throws.Nothing);

とベッテッドNUnit 2.x


0

電子メールを検証するFormValidationUtilsクラスを作成しました。

public static class FormValidationUtils
{
    const string ValidEmailAddressPattern = "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$";

    public static bool IsEmailValid(string email)
    {
        var regex = new Regex(ValidEmailAddressPattern, RegexOptions.IgnoreCase);
        return regex.IsMatch(email);
    }
}

0

正規表現を使用したメール検証

    string pattern = @"\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";

    //check first string
   if (Regex.IsMatch(EmailId1 , pattern))
   {    
       //if email is valid
        Console.WriteLine(EmailId1+ " is a valid Email address ");
   }

ソース:メール検証c#

MailAddress.MailAddress(String)クラスコンストラクターを使用した正規表現なしの検証

public bool IsEmailValid(string emailaddress)
{
 try
 {
    MailAddress m = new MailAddress(emailaddress);
    return true;
 }
 catch (FormatException)
 {
    return false;
 }
}

これは一致しませんme@localhost。以下のサイトをご覧ください。TLDリスト ; 有効/無効なアドレス ; RFC822メールアドレスの正規表現
Toto
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.