E-Mail-Marketing und E-Mail-Marketing-AutomatisierungCRM- und Datenplattformen

So validieren Sie eine E-Mail-Adresse mit regulären Ausdrücken (Regex)

Nahezu jede Programmiersprache unterstützt heutzutage reguläre Ausdrücke. Obwohl einige Entwickler sie nicht mögen, sind sie wirklich eine bewährte Methode, da sie normalerweise Funktionen wie die Validierung extrem schnell mit weniger Serverressourcen ausführen. E-Mail-Adressen sind ein perfektes Beispiel … wo sie leicht überprüft werden können, um sicherzustellen, dass sie richtig formatiert sind.

Denken Sie daran, dass die Validierung nicht der Fall ist Überprüfung. Validierung bedeutet einfach, dass die übergebenen Daten einem ordnungsgemäß aufgebauten Standardformat folgen. Einige interessante Dinge über E-Mail-Adressen, die bei der Validierung übersehen werden könnten.

Wie lang darf eine E-Mail-Adresse sein?

Ich musste heute ein bisschen graben, um es zu finden, aber wussten Sie, wie lang eine E-Mail-Adresse gültig ist? Es ist tatsächlich in Teile zerbrochen ... Name@Domain.com. Dies ist nach RFC2822.

  1. Der Name kann 1 bis 64 Zeichen lang sein.
  2. Die Domain kann 1 bis 255 Zeichen lang sein.

Das bedeutet, dass dies eine gültige E-Mail-Adresse sein könnte:

loremaipsumadolorasitaametbaconsectetueraadipiscin
gaelitanullamc@loremaipsumadolorasitaametbaconsect
etueraadipiscingaelitcaSedaidametusautanisiavehicu
laaluctuscaPellentesqueatinciduntbadiamaidacondimn
tumarutrumbaturpisamassaaconsectetueraarcubaeuatin
ciduntaliberoaaugueavestibulumaeratcaPhasellusatin
ciduntaturpisaduis.com

Versuchen Sie, das auf einer Visitenkarte unterzubringen! Ironischerweise sind die meisten E-Mail-Adressfelder im Web auf 100 Zeichen begrenzt … was technisch nicht korrekt ist. Einige der anderen regulären Ausdrücke, die zur Validierung von E-Mail-Adressen verwendet werden, suchen ebenfalls nach einer dreistelligen Top-Level-Domain, wie .com; Es gibt jedoch keine Beschränkung der Länge von Top-Level-Domains (z.B. Martech Zone hat 4 Ziffern – .zone).

Die Standardisierung von E-Mail-Adressen ist viel komplexer, als Sie denken. Nach dem Standard geschrieben, ist hier der wahre reguläre Ausdruck für eine E-Mail-Adresse, credit to Regexr:

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

HTML5 braucht nicht einmal eine Validierung

Das einfachste Mittel, um sicherzustellen, dass eine E-Mail gemäß dem Standard valide ist, ist die Verwendung eines HTML5-E-Mail-Eingabefelds:

<input type='email' name='email' placeholder='name@domain.com' />

Es kann jedoch vorkommen, dass Ihre Webanwendung die E-Mail-Adresse sowohl bei der Eingabe im Browser als auch bei der Übermittlung an Ihren Server validieren möchte.

Regex für eine korrekte E-Mail-Adresse in PHP

Nur wenige Leute wissen es, aber PHP hat jetzt den RFC-Standard eingebaut Filtervalidierungsfunktion.

if(filter_var("name@domain.com", FILTER_VALIDATE_EMAIL)) {
    // Valid
}
else {
    // Not Valid
}

Regex für eine korrekte E-Mail-Adresse in Javascript

Sie müssen keinen übermäßig komplexen Standard zum Überprüfen einer E-Mail-Adressstruktur haben. Hier ist ein einfaches Mittel mit JavaScript.

function validateEmail(email) 
{
    var re = /\\S+@\\S+/;
    return re.test(email);
}

Das entspricht natürlich nicht dem RFC-Standard, daher möchten Sie möglicherweise jeden Abschnitt der Daten validieren, um sicherzustellen, dass er gültig ist. Dieser reguläre Ausdruck entspricht etwa 99.9 % der E-Mail-Adressen da draußen. Es entspricht nicht vollständig dem Standard, ist aber für praktisch jedes Projekt nützlich.

function validateEmail(email) 
{
  var re = /^(?:[a-z0-9!#$%&amp;'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&amp;'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/;

  return re.test(email);
}

Die Anerkennung für diese Beispiele geht an HTML.form.guide.

Douglas Karr

Douglas Karr ist der Gründer der Martech Zone und anerkannter Experte für digitale Transformation. Douglas hat bei der Gründung mehrerer erfolgreicher MarTech-Startups geholfen, bei der Due Diligence von über 5 Mrd. Er ist Mitbegründer von Highbridge, ein Beratungsunternehmen für digitale Transformation. Douglas ist auch ein veröffentlichter Autor eines Dummie's Guide und eines Buches über Unternehmensführung.

41 Kommentare

  1. Für Formulare mit mehreren E-Mail-Adressen wäre es gut, class="emailaddress" zu verwenden. Wenn Sie über die Prototyp.js-Bibliothek (http://www.prototypejs.org) auf der Seite enthalten können Sie so etwas tun:

    var gültig = wahr;
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    $$ ('. emailaddress'). each (Funktion (E-Mail) {
    if (! filter.test (email.value)) {
    alert (? Bitte geben Sie eine gültige E-Mail-Adresse an?);
    email.fokus;
    gültig = falsch;
    }
    });
    Rückgabe gültig;

  2. Ich mag die Idee, aber ich würde zögern, diesen speziellen regulären Ausdruck zu übernehmen, ohne zu beschreiben, welche legalen E-Mail-Adressen er nicht akzeptiert und welche illegalen Adressen er zulässt.

    Ein Beispiel für einen regulären Ausdruck, der gute Arbeit leistet, sowie eine Erklärung, welche Fälle nicht behandelt werden, finden Sie hier:

    http://www.regular-expressions.info/email.html

    Meine persönliche Präferenz ist es, die meisten einfachen Fälle abzudecken und eine Warnung für alles andere auszugeben, anstatt sie abzulehnen. Wenn Bob wirklich sto einreichen will bob@com.museum statt bob@museum.com, warum nicht ihn lassen?

    1. Hallo Reg,

      Sie können den Regex mit einem testen Online-Regex-Tester.

      Außerdem kann definitiv noch viel mehr getan werden, wenn Sie eine sicherstellen möchten E-Mail-Addresse ist gemäß RFC gültig.

      Es gibt einige Gründe, warum jemand keine ungültige E-Mail-Adresse eingeben darf:
      1. Sie ärgern sich über Sie, wenn die erwartete E-Mail nicht ankommt – egal, ob Sie an der falschen Adresseingabe schuld sind oder nicht.
      2. Wenn com.museum eine gültige Domain war und, sagen wir, Yahoo! betrieben – jede E-Mail-Adresse, die unzustellbar ist, würde sich negativ auf den Ruf Ihres Unternehmens für die E-Mail-Zustellung auswirken. Dies kann dazu führen, dass alle E-Mails Ihres Unternehmens blockiert werden.
      3. Wenn Ihr E-Mail-Dienstanbieter Ihnen die Eingabe erlaubt hat bob@com.museum, zahlen Sie auch für jede E-Mail, die an diese E-Mail-Adresse gesendet wird, bis sie diese Adresse aufgrund von Unzustellbarkeiten abbestellt haben. Ich würde mich von ESP fernhalten, die eine solche ungültige E-Mail-Adresse zulassen würde – sie nehmen nur Ihr Geld!

      Danke für's vorbeikommen!
      Doug

  3. Es gibt eine viel einfachere Möglichkeit, den Ausdruck zu schreiben:
    var regex = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
    - Mit dem letzten Modifikator / i muss der Großbuchstabenbereich nicht angegeben werden.
    - Ich kenne keine TLDs mit Zahlen drin.
    Nebenbei bemerkt, ich erlaube TLD mit bis zu 6 Zeichen; Neue kommen regelmäßig und man weiß es nie (na ja, einige zukünftige haben vielleicht sogar Zahlen, ich weiß).

  4. Hallo,

    Ich versuche, dies in einer vorhandenen Form in Echtzeit zu verwenden, aber dies scheint nicht in Echtzeit zu validieren, wie dies bei der Überprüfung Ihrer Passwortstärke der Fall ist.

    Oder bin ich nur so ahnungslos und es funktioniert nicht für mich?

  5. Nur eine kleine Korrektur: Der reguläre Ausdruck hat am Ende ein extra () +. Es sollte lauten:

    ^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+[a-zA-Z0-9]{2,4}$

    Mit dem ersten würden TLDs beliebiger Länge akzeptiert (was nicht intrinsecal falsch ist, wie andere betont haben, aber wenn dies die Absicht wäre, könnte der Ausdruck verkürzt werden).

  6. Können Sie bitte den regulären Ausdruck dieses Codes und seine Funktionsweise erläutern? Auch über .test - Ist .test eine Standardanweisung in Javascript, um Dinge zu überprüfen, wie Sie es im obigen Code getan haben?

  7. Dies ist ein Funktionscode für den Ausdruck von E-Mails.

    Funktion validateEmail (id)
    {
    var emailPattern = /^[a-zA-Z0-9._- weibl.
    return emailPattern.test (id);

    }
    Deepak Rai
    varanasi

  8. Danke, aber es gibt einen Fehler in dieser Regex. Ich bin kein Regex-Experte, aber ich habe versucht, eine E-Mail zu senden:

    Test Test

    und es hat die Regex bestanden ... Ich habe bemerkt, dass es fehlt, dem "." so sollte es sein:

    /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/

  9. Nun, dies ist nur eine grobe Überprüfung, aber nicht 100% genau, zum Beispiel wäre dies in Ordnung john_doe. @ gmail.com Dies ist eigentlich keine gültige E-Mail-Adresse (Punkt ist nicht als letztes Zeichen im lokalen Teil der E-Mail zulässig).
    Auch würde es akzeptieren john…doe@gmail.com Dies ist auch ungültig, da eine Sequenz nicht mehr als einen Punkt enthalten kann.

    Dies sind nur einige Mängel, die ich auf den ersten Blick bemerkt habe.
    Meine Absicht ist es nicht, nur darauf hinzuweisen, falls jemand plant, dies als Sicherheitskontrolle zu verwenden - nicht sicher genug.

    Informationen zu gültigen E-Mail-Adressen finden Sie hier: http://en.wikipedia.org/wiki/E-mail_address

  10. Deepak,

    Eigentlich denke ich, dass Sie ein Escape für den Punkt (".") Anwenden müssen. Ihre Funktion sollte also stattdessen sein:

    Funktion validateEmail (id)
    {
    var emailPattern = /^[a-zA-Z0-9._- weibl.
    return emailPattern.test (id);

    }

    Andernfalls würde der Punkt "jedes Zeichen" bedeuten. Ich glaube, solche Sonderzeichen müssen entkommen.

    Grüße,

    Federico

  11. Funktion validateEmail (fld) {
    var error = ””;
    var tfld = trim(fld.wert); // Wert des Feldes mit abgeschnittenem Leerzeichen
    var emailFilter = /^[^@‹+@[^@.‹+.[^@‹*ww$/;
    var illegalChars = / [(),;: \ ”[]] /;

    if (fld.value == "Geben Sie Ihre E-Mail-Adresse ein") {

    error = "Bitte geben Sie Ihre E-Mail-Adresse ein.n";
    } else if (!emailFilter.test(tfld)) { //E-Mail auf illegale Zeichen testen

    error = "Bitte geben Sie eine gültige E-Mail-Adresse ein.n";
    } else if (fld.value.match (illegalChars)) {

    error = "Bitte geben Sie eine gültige E-Mail-Adresse ein.n";
    }
    Rückgabefehler;
    }

  12. Funktion validateEmail (fld) {
    var error = ””;
    var tfld = trim(fld.wert); // Wert des Feldes mit abgeschnittenem Leerzeichen
    var emailFilter = /^[^@‹+@[^@.‹+.[^@‹*ww$/;
    var illegalChars = / [(),;: \ ”[]] /;

    if (fld.value == "Geben Sie Ihre E-Mail-Adresse ein") {

    error = "Bitte geben Sie Ihre E-Mail-Adresse ein.n";
    } else if (!emailFilter.test(tfld)) { //E-Mail auf illegale Zeichen testen

    error = "Bitte geben Sie eine gültige E-Mail-Adresse ein.n";
    } else if (fld.value.match (illegalChars)) {

    error = "Bitte geben Sie eine gültige E-Mail-Adresse ein.n";
    }
    Rückgabefehler;
    }

  13. Funktion validateEmail (fld) {
    var error = ””;
    var tfld = trim(fld.wert); // Wert des Feldes mit abgeschnittenem Leerzeichen
    var emailFilter = /^[^@‹+@[^@.‹+.[^@‹*ww$/;
    var illegalChars = / [(),;: \ ”[]] /;

    if (fld.value == "Geben Sie Ihre E-Mail-Adresse ein") {

    error = "Bitte geben Sie Ihre E-Mail-Adresse ein.n";
    } else if (!emailFilter.test(tfld)) { //E-Mail auf illegale Zeichen testen

    error = "Bitte geben Sie eine gültige E-Mail-Adresse ein.n";
    } else if (fld.value.match (illegalChars)) {

    error = "Bitte geben Sie eine gültige E-Mail-Adresse ein.n";
    }
    Rückgabefehler;
    }

  14. Funktion validateEmail (fld) {
    var error = ””;
    var tfld = trim(fld.wert); // Wert des Feldes mit abgeschnittenem Leerzeichen
    var emailFilter = /^[^@‹+@[^@.‹+.[^@‹*ww$/;
    var illegalChars = / [(),;: \ ”[]] /;

    if (fld.value == "Geben Sie Ihre E-Mail-Adresse ein") {

    error = "Bitte geben Sie Ihre E-Mail-Adresse ein.n";
    } else if (!emailFilter.test(tfld)) { //E-Mail auf illegale Zeichen testen

    error = "Bitte geben Sie eine gültige E-Mail-Adresse ein.n";
    } else if (fld.value.match (illegalChars)) {

    error = "Bitte geben Sie eine gültige E-Mail-Adresse ein.n";
    }
    Rückgabefehler;
    }

Was denken Sie?

Diese Seite verwendet Akismet, um Spam zu reduzieren. Erfahren Sie, wie Ihre Kommentardaten verarbeitet werden.

Verwandte Artikel