621 Stimmen

C#-Code zur Validierung von E-Mail-Adressen

Was ist der eleganteste Code, um zu überprüfen, ob eine Zeichenkette eine gültige E-Mail-Adresse ist?

37voto

Kibbee Punkte 64039

Persönlich würde ich sagen, dass Sie einfach sicherstellen sollten, dass ein @-Symbol darin vorkommt, möglicherweise mit einem . Es gibt viele Regexe mit unterschiedlicher Korrektheit, aber ich denke, dass die meisten davon gültige E-Mail-Adressen auslassen oder ungültige durchlassen. Wenn jemand eine gefälschte E-Mail-Adresse eingeben will, wird er eine gefälschte Adresse eingeben. Wenn Sie überprüfen müssen, ob die E-Mail-Adresse echt ist und ob die Person die Kontrolle über diese E-Mail-Adresse hat, müssen Sie ihr eine E-Mail mit einem speziellen kodierten Link schicken, damit sie überprüfen kann, ob es sich tatsächlich um eine echte Adresse handelt.

33voto

Naveen Punkte 1325

Kurzer und präziser Code

string Email = txtEmail.Text;
if (Email.IsValidEmail())
{
   //use code here 
}

public static bool IsValidEmail(this string email)
{
  string pattern = @"^(?!\.)(""([^""\r\\]|\\[""\r\\])*""|" + @"([-a-z0-9!#$%&'*+/=?^_`{|}~]|(?<!\.)\.)*)(?<!\.)" + @"@[a-z0-9][\w\.-]*[a-z0-9]\.[a-z][a-z\.]*[a-z]$";    
  var regex = new Regex(pattern, RegexOptions.IgnoreCase);    
  return regex.IsMatch(email);
}

18voto

Poyson1 Punkte 393

Ich denke, der beste Weg ist der folgende:

    public static bool EmailIsValid(string email)
    {
        string expression = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";

        if (Regex.IsMatch(email, expression))
        {
            if (Regex.Replace(email, expression, string.Empty).Length == 0)
            {
                return true;
            }
        }
        return false;
    }

Sie können diese statische Funktion in einer allgemeinen Klasse haben.

17voto

WonderWorker Punkte 7910

Der eleganteste Weg ist die Verwendung der in .Net eingebauten Methoden.

Diese Methoden:

  • sind erprobt und bewährt. Diese Methoden werden in meinen eigenen professionellen Projekten eingesetzt.

  • Verwenden Sie intern reguläre Ausdrücke, die zuverlässig und schnell sind.

  • Hergestellt von Microsoft für C#. Es gibt keinen Grund, das Rad neu zu erfinden.

  • Gibt ein boolsches Ergebnis zurück. True bedeutet, dass die E-Mail gültig ist.

Für Benutzer von .Net 4.5 und höher

Fügen Sie diese Referenz zu Ihrem Projekt hinzu:

System.ComponentModel.DataAnnotations

Jetzt können Sie den folgenden Code verwenden:

(new EmailAddressAttribute().IsValid("youremailhere@test.test"));

Beispiel für die Verwendung

Hier sind einige Methoden zu deklarieren:

protected List<string> GetRecipients() // Gets recipients from TextBox named `TxtRecipients`
{
    List<string> MethodResult = null;

    try
    {
        List<string> Recipients = TxtRecipients.Text.Replace(",",";").Replace(" ", "").Split(';').ToList();

        List<string> RecipientsCleaned = new List<string>();

        foreach (string Recipient in RecipientsCleaned)
        {
            if (!String.IsNullOrWhiteSpace(Recipient))
            {
                RecipientsNoBlanks.Add(Recipient);

            }

        }

        MethodResult = RecipientsNoBlanks;

    }
    catch//(Exception ex)
    {
        //ex.HandleException();
    }

    return MethodResult;

}

public static bool IsValidEmailAddresses(List<string> recipients)
{
    List<string> InvalidAddresses = GetInvalidEmailAddresses(recipients);

    return InvalidAddresses != null && InvalidAddresses.Count == 0;

}

public static List<string> GetInvalidEmailAddresses(List<string> recipients)
{
    List<string> MethodResult = null;

    try
    {
        List<string> InvalidEmailAddresses = new List<string>();

        foreach (string Recipient in recipients)
        {
            if (!(new EmailAddressAttribute().IsValid(Recipient)) && !InvalidEmailAddresses.Contains(Recipient))
            {
                InvalidEmailAddresses.Add(Recipient);

            }

        }

        MethodResult = InvalidEmailAddresses;

    }
    catch//(Exception ex)
    {
        //ex.HandleException();

    }

    return MethodResult;

}

...und Code, der sie in Aktion zeigt:

List<string> Recipients = GetRecipients();

bool IsValidEmailAddresses = IsValidEmailAddresses(Recipients);

if (IsValidEmailAddresses)
{
    //Emails are valid. Your code here

}
else
{
    StringBuilder sb = new StringBuilder();

    sb.Append("The following addresses are invalid:");

    List<string> InvalidEmails = GetInvalidEmailAddresses(Recipients);

    foreach (string InvalidEmail in InvalidEmails)
    {
        sb.Append("\n" + InvalidEmail);

    }

    MessageBox.Show(sb.ToString());

}

Außerdem dieses Beispiel:

  • Geht über die Spezifikation hinaus, da eine einzelne Zeichenkette verwendet wird, um 0, eine oder mehrere E-Mail-Adressen, getrennt durch ein Semikolon, zu enthalten. ; .
  • Zeigt anschaulich, wie man die IsValid-Methode des EmailAddressAttribute-Objekts verwendet.

Alternativ, für Benutzer einer Version von .Net kleiner als 4.5

Für Situationen, in denen .Net 4.5 nicht verfügbar ist, verwende ich die folgende Lösung:

Genauer gesagt, ich verwende:

public static bool IsValidEmailAddress(string emailAddress)
{
    bool MethodResult = false;

    try
    {
        MailAddress m = new MailAddress(emailAddress);

        MethodResult = m.Address == emailAddress;

    }
    catch //(Exception ex)
    {
        //ex.HandleException();

    }

    return MethodResult;

}

public static List<string> GetInvalidEmailAddresses(List<string> recipients)
{
    List<string> MethodResult = null;

    try
    {
        List<string> InvalidEmailAddresses = new List<string>();

        foreach (string Recipient in recipients)
        {
            if (!IsValidEmail(Recipient) && !InvalidEmailAddresses.Contains(Recipient))
            {
                InvalidEmailAddresses.Add(Recipient);

            }

        }

        MethodResult = InvalidEmailAddresses;

    }
    catch //(Exception ex)
    {
        //ex.HandleException();

    }

    return MethodResult;

}

11voto

Noon Silk Punkte 52750

Um ehrlich zu sein, in der Produktion Code, das Beste, was ich tun, ist für eine Überprüfung @ Symbol.

Ich bin nie in der Lage, E-Mails vollständig zu validieren. Wissen Sie, wie ich herausfinde, ob sie wirklich gültig war? Wenn sie abgeschickt wurde. Wenn nicht, ist es schlecht, wenn ja, ist das Leben gut. Das ist alles, was ich wissen muss.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X