Überprüfen Sie die E-Mail-Adresse mit JavaScript und regulären Ausdrücken

Vor einiger Zeit habe ich eine Password Strength Checker mit JavaScript und regulären Ausdrücken. In diesem Sinne können Sie auch die Struktur einer E-Mail-Adresse mithilfe derselben Regex-Methode (regulärer Ausdruck) überprüfen.

Wenn Ihr Formularelement die hat id = "E-Mail-Adresse" und Sie fügen ein Formular hinzu onSubmit = ”return checkEmail ();„Dies ist eine Javascript-Funktion, mit der Sie eine Warnung zurückgeben können, wenn die E-Mail-Adresse eine gültige Struktur hat oder nicht:

function checkEmail() {
var email = document.getElementById('emailaddress');
var filter = /^(([^<>()[\]\\.,;:\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,}))$/;
if (!filter.test(email.value)) {
alert('Please provide a valid email address');
email.focus;
return false;
}
}

Die Funktion überprüft den Inhalt der E-Mail auf den des Filters. Wenn der Vergleich fehlschlägt, wird eine Warnung angezeigt und der Fokus wird wieder auf das E-Mail-Adressfeld zurückgesetzt!

41 Kommentare

  1. 1

    Für Formulare mit mehreren E-Mail-Adressen empfiehlt es sich, class = "emailaddress" zu verwenden. Wenn Sie die Bibliothek prototype.js haben (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. 5
  3. 7

    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?

    • 8

      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 werden sich über Sie ärgern, wenn die erwartete E-Mail nicht eingeht - unabhängig davon, ob es Ihre Schuld war oder nicht, dass die Adresse falsch eingegeben wurde.
      2. Wenn com.museum eine gültige Domain war und Yahoo! betrieb es - jede zurückgesendete E-Mail-Adresse 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 gestattet hat bob@com.museumSie würden auch für jede E-Mail bezahlen, die an diese E-Mail-Adresse gesendet wird, bis sie diese Adresse aufgrund von Bounces abbestellt hat. Ich würde mich von jedem ESP fernhalten, das eine solche ungültige E-Mail-Adresse zulässt - sie nehmen nur Ihr Geld!

      Danke für's vorbeikommen!
      Doug

  4. 9
  5. 10

    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ß).

  6. 11

    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?

  7. 12

    Übrigens, ich mag wirklich, was Sie hier vorhaben, Ihre Tutorials sind sehr einfach, ich werde dieses auf jeden Fall mit einem Lesezeichen versehen….

  8. 13
  9. 16
  10. 17

    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).

  11. 18

    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?

  12. 19
  13. 20

    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

  14. 21
  15. 22
  16. 23

    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})+$/

  17. 24
  18. 27

    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

  19. 28

    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

  20. 29

    Funktion validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // 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 unzulässige 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;
    }

  21. 30

    Funktion validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // 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 unzulässige 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;
    }

  22. 31

    Funktion validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // 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 unzulässige 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;
    }

  23. 32

    Funktion validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // 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 unzulässige 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;
    }

  24. 33
  25. 34
  26. 35
  27. 36
  28. 37
  29. 38
  30. 39
  31. 40

Was denken Sie?

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