Enrico: Welche eMail-Validierung würdet Ihr bevorzugen ?

Hallo,

Welche Überprüfung einer eingegebenen eMail-Adresse über Javascript würdet Ihr bevorzugen (die serverseitige Prüfung folgt natürlich auch noch).

**************
* VARIANTE 1 *
**************

function checkValidation (addressField)
{
  if (noAtSign (addressField.value))
    // Fehler 3
  else
    if (nothingBeforeAt (addressField.value))
      // Fehler 4
    else
      if (noLeftBracket (addressField.value))
        // Fehler 5
      else
        if (noRightBracket (addressField.value))
          // Fehler 6
        else
          if (noValidPeriod (addressField.value))
            // Fehler 7
          else
            if (noValidSuffix (addressField.value))
              // Fehler 8
            else
              return (true);
  return (false);
}

function linkCheckValidation (formField)
{
  if (checkValidation (formField) == true)
  {
    alert ('E-Mail Address Validates OK');
  }
  return (false);
}

function noAtSign (address)
{
  if (address.indexOf ('@', 0) == -1)
    return (true)
  else
    return (false);
}

function nothingBeforeAt (address)
{
  if (address.indexOf ('@', 0) < 1)
    return (true)
  else
    return (false);
}

function noLeftBracket (address)
{
  if (address.indexOf ('[', 0) == -1 && address.charAt (address.length - 1) == ']')
    return (true)
  else
    return (false);
}

function noRightBracket (address)
{
  if (address.indexOf ('[', 0) > -1 && address.charAt (address.length - 1) != ']')
    return (true);
  else
    return (false);
}

function noValidPeriod (address)
{
  if (address.indexOf ('@', 0) > 1 && address.charAt (address.length - 1) == ']')
    return (false);

if (address.indexOf ('.', 0) == -1)
    return (true);

return (false);
}

function noValidSuffix (address)
{
  if (address.indexOf ('@', 0) > 1 && address.charAt (address.length - 1) == ']')
    return (false);

var len = address.length;
  var pos = address.lastIndexOf ('.', len - 1) + 1;

if ((len - pos) < 2 || (len - pos) > 3)
    return (true);
  else
    return (false);
}

**************
* VARIANTE 2 *
**************

function email_pruefen (inhalt, feld_art)
{
  inhalt = inhalt.toLowerCase();

if (inhalt.length < 7 || inhalt.indexOf("@.") != -1 || inhalt.indexOf("-.") != -1 || inhalt.indexOf("_.") != -1 || inhalt.indexOf("..") != -1 || inhalt.indexOf("._") != -1 || inhalt.indexOf(".-") != -1 || inhalt.indexOf(".@") != -1 || inhalt.indexOf("@-") != -1 || inhalt.indexOf("@_") != -1 || inhalt.indexOf("@") != inhalt.lastIndexOf("@") || inhalt.indexOf("@") == -1 || inhalt.indexOf(".") == -1 || (inhalt.length - (inhalt.lastIndexOf(".") + 1)) < 2)
    return (fehler = true);
  else
  {
    ausdruck = /[1]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].[a-z][a-z]$¦[2]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].aero$¦[3]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].biz$¦[4]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].coop$¦[5]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].com$¦[6]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].edu$¦[7]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].gov$¦[8]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].info$¦[9]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].int$¦[10]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].mil$¦[11]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].museum$¦[12]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].name$¦[13]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].net$¦[14]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].org$¦[15]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].pro$/i;

if (ausdruck.test(inhalt))
    {
      ausdruck = /[16]/i;

if (!(ausdruck.test(inhalt)))
        return (fehler = true);
    }
    else
      return (fehler = true);
  }

return fehler;
}

Enrico


  1. a-z0-9._ ↩︎

  2. a-z0-9._ ↩︎

  3. a-z0-9._ ↩︎

  4. a-z0-9._ ↩︎

  5. a-z0-9._ ↩︎

  6. a-z0-9._ ↩︎

  7. a-z0-9._ ↩︎

  8. a-z0-9._ ↩︎

  9. a-z0-9._ ↩︎

  10. a-z0-9._ ↩︎

  11. a-z0-9._ ↩︎

  12. a-z0-9._ ↩︎

  13. a-z0-9._ ↩︎

  14. a-z0-9._ ↩︎

  15. a-z0-9._ ↩︎

  16. a-z0-9_ ↩︎

  1. Moin!

    Welche Überprüfung einer eingegebenen eMail-Adresse über Javascript würdet Ihr bevorzugen (die serverseitige Prüfung folgt natürlich auch noch).

    Keine von beiden. Bei beiden Varianten habe ich das dumme Gefühl, dass gültige Mailadressen als ungültig abgewiesen werden.

    Wenn du ohnehin serverseitig prüfst (dort stehen dir mehr Mittel zur Verfügung, u.a. Zugriff auf DNS etc.), solltest du mit Javascript nur die einfachsten DAU-Fehler berücksichtigen:
    1. Eine Mailadresse ohne @ ist keine.
    2. Eine Mailadresse ohne ordentliche Domain (die enthält mindestens einen Punkt) ist auch keine.
    3. Eine Mailadresse ohne User-Anteil vor dem @ ist auch keine.

    Der Rest ist auf dem Server zu regeln.

    An Variante 2 ist insbesondere die explizite Nennung der gültigen Top-Level-Domains zu kritisieren, während ich bei Variante 1 vermute, dass Top-Level-Domains unzulässig in der Länge begrenzt sind.

    - Sven Rautenberg

    1. Hello,

      1. Eine Mailadresse ohne ordentliche Domain (die enthält mindestens einen Punkt) ist auch keine.

      Diese Prüfbedingung hat mir mal seeehr viel Ärger bereitet. Es war nämlich nicht mehr möglich, lokale Mailkonten anzusprechen (thomas@localhost).

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
        Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
        Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      1. Hello,

        1. Eine Mailadresse ohne ordentliche Domain (die enthält mindestens einen Punkt) ist auch keine.

        Diese Prüfbedingung hat mir mal seeehr viel Ärger bereitet. Es war nämlich nicht mehr möglich, lokale Mailkonten anzusprechen (thomas@localhost).

        Jow, hatte ich auch schon. Im Übrigen denke ich, dass es bei einem lumpigen Feedbackformular Zeitverschwendung ist, den korrekten Syntax einer eingegebenen Mailadresse zu prüfen, weil: der Mailgateway prüft ja auch. Und falls es wirklich mal Unstimmigkeiten gibt, hinsichtlich der Erreichbarkeit eines Webmasters, im Impressum stehen:

        • eMailAdresse
        • Anschrift
        • Telefonnummer

        Gruss, Rolf

        --
        50 Millionen Deutsche können nicht richtig HTML!
      2. Moin!

        1. Eine Mailadresse ohne ordentliche Domain (die enthält mindestens einen Punkt) ist auch keine.

        Diese Prüfbedingung hat mir mal seeehr viel Ärger bereitet. Es war nämlich nicht mehr möglich, lokale Mailkonten anzusprechen (thomas@localhost).

        Das sind Sonderbedingungen, die man natürlich weiß, wenn man sowas einrichtet. Oder erwartest du, unter der o.a. Adresse Mails aus dem Internet zu empfangen?

        - Sven Rautenberg

        1. Hello,

          Das sind Sonderbedingungen, die man natürlich weiß, wenn man sowas einrichtet. Oder erwartest du, unter der o.a. Adresse Mails aus dem Internet zu empfangen?

          Wär doch bestimmt mal lustig, oder?

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
            Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
            Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    2. Hi,

      An Variante 2 ist insbesondere die explizite Nennung der gültigen Top-Level-Domains zu kritisieren,

      Und die Beschränkung auf wenige Zeichen: a-z0-9-.
      Umlautdomains existieren aber (leider).

      cu,
      Andreas

      --
      MudGuard? Siehe http://www.Mud-Guard.de/
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      1. Moin,

        Und die Beschränkung auf wenige Zeichen: a-z0-9-.
        Umlautdomains existieren aber (leider).

        Aber nicht in Mailaddressen.

        --
        Henryk Plötz
        Grüße aus Berlin
        ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
        ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
        1. Hi,

          Umlautdomains existieren aber (leider).
          Aber nicht in Mailaddressen.

          Wie kommst Du darauf, daß diese in Mail-Adressen nicht existieren dürfen?

          cu,
          Andreas

          --
          MudGuard? Siehe http://www.Mud-Guard.de/
          Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          1. Moin,

            Wie kommst Du darauf, daß diese in Mail-Adressen nicht existieren dürfen?

            http://groups.google.com/groups?as_umsgid=<1295.962.1078571139%40news.jors.net>

            --
            Henryk Plötz
            Grüße aus Berlin
            ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
            ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
            1. Hi,

              Wie kommst Du darauf, daß diese in Mail-Adressen nicht existieren dürfen?
              http://groups.google.com/groups?as_umsgid=<1295.962.1078571139%40news.jors.net>

              Und?

              Da setz ich doch mal ganz locker http://www.müller.de/ dagegen, insbes. auch http://www.müller.de/impressum.html

              cu,
              Andreas

              --
              MudGuard? Siehe http://www.Mud-Guard.de/
              Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
              1. Moin,

                Da setz ich doch mal ganz locker http://www.müller.de/ dagegen, insbes. auch http://www.müller.de/impressum.html

                Hmm, das ist eher eine 'Begründung' auf »onclick="javascript:alert('foo')" funktioniert aber!!!1!!1eins«-Niveau. Wenn du jetzt gesagt hättest, »RFC 3490 Abschnitt 2 definiert den Teil einer Email-Addresse der dem @ folgt als domain name slot, der nicht-IDN-aware ist (da die entsprechende Spezifikation aus Vor-IDNA-Zeiten stammt), und Abschnitt 3.1 verlangt, dass IDNs in solchen Slots nur ASCII-Zeichen enthalten, also mit ToASCII bearbeitet werden«, dann wäre das vielleicht diskussionsfähig.

                ;-)

                --
                Henryk Plötz
                Grüße aus Berlin
                ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
                ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
                1. Hi,

                  Hmm, das ist eher eine 'Begründung' auf »onclick="javascript:alert('foo')" funktioniert aber!!!1!!1eins«-Niveau.

                  War Dein Argument denn auf höherem Niveau?

                  Der Kommentar irgendeines Menschen, der
                  <cite>
                  Ich warte ja noch auf den ersten Deppen, der mir mit
                  | From: "Voll Idiot" <voll.idiot@äöü.de>
                  daherkommt
                  </cite>
                  schreibt, ist für mich auch kein wirkliches Argument gegen die Zulässigkeit von IDN bei mail.

                  cu,
                  Andreas

                  --
                  MudGuard? Siehe http://www.Mud-Guard.de/
                  Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
              2. Hi,

                Wie kommst Du darauf, daß diese in Mail-Adressen nicht existieren dürfen?
                http://groups.google.com/groups?as_umsgid=<1295.962.1078571139%40news.jors.net>

                Und?

                Da setz ich doch mal ganz locker http://www.müller.de/

                http://www.müller.de/

                dagegen, insbes. auch http://www.müller.de/impressum.html

                http://www.müller.de/impressum.html

                http://www.denic.de/de/domains/idns/tool.jsp ;-))

                Laut http://www.faqs.org/rfcs/rfc3490.html soll die Auflösung der Umlaute ja im Client-System auf Applicationebene stattfinden. Das heißt, dass der Nutzer www.müller.de eingibt und der Browser http://www.xn--mller-kva.de/ draus macht. Der Server sieht also Umlaute nie. Ebenso wird es doch mit Umlauten in E-Mail-Domains sein. Der Mailclient macht aus info@müller.de erst info@xn--mller-kva.de. Der Server sieht keinen Umlaut. Serverseitig müssen also auch die Vorgaben für URI und Internet Message Format nicht geändert werden.

                Sehe ich das falsch?

                viele Grüße

                Axel

                1. Hallo Axel,

                  [...]
                  Sehe ich das falsch?

                  Nein, die RFC sagt genau das aus.

                  Grüße,
                   CK

                  --
                  Willst du die Freuden dieser Welt geniessen, so musst du auch ihr Leid erdulden.
                  http://wwwtech.de/
  2. N'Obend

    Unter http://aktuell.de.selfhtml.org/tippstricks/programmiertechnik/email/index.html findest du recht elegante Lösungen zur Email-Valdidierung, auch für JavaScript.

    ********

    function checkEmail(email) {
      var proto  = "(mailto:)?";
      var usr    = "([a-zA-Z0-9][a-zA-Z0-9_.-]*|"([^\\\x80-\xff\015\012"]|\\[^\x80-\xff])+")";
      var domain = "([a-zA-Z0-9][a-zA-Z0-9._-]*\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\.[a-zA-Z]{2,5}";
      var regex  = "^" + proto + "?" + usr + "@" + domain + "$";

    var rgx    = new RegExp(regex);
      return rgx.exec(email) ? true : false;
    }

    ********

    Das Ding hab ich (in leicht abgewandelter Form und in Verbindung mit anschließender Serverseitigen Überprüfung...) hier auch im Einsatz. Scheint mir recht solide.

    Tschö,
    dbenzhuser

    1. Hi,

      var domain = "([a-zA-Z0-9][a-zA-Z0-9._-]*\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\.[a-zA-Z]{2,5}";

      Mindestens eine Top-Level-Domain wird ausgeschlossen (.museum hat 6 Zeichen).
      Und Umlaut-Domains werden auch ausgeschlossen.

      cu,
      Andreas

      --
      MudGuard? Siehe http://www.Mud-Guard.de/
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      1. Hallo.

        Und Umlaut-Domains werden auch ausgeschlossen.

        Sehr gut, dann werde ich das Skript auch weiterempfehlen ;-)
        MfG, at