Andreas: eMail-Prüfung mit RegExp

Hallo,

Ich habe folgende RegExp-Ausdrücke zur Überprüfung einer eingegebenen eMail-Adresse definiert:

var err_email = new Array();
err_email(1)  = "Emails müssen mit einem Buchstaben oder<br>einer Zahl beginnen, aber nur mit den<br>Buchstaben, die auch Bestandteil einer<br>Url sein können."
err_email(2)  = "Du hast vergessen, das '@'-Zeichen<br>einzugeben. Alle eMail-Adressen haben<br>ein '@'-Zeichen, um den frei wählbaren<br>Namen von der Domain zu trennen.
err_email(3)  = "Vor dem '@'-Zeichen steht ein Zeichen,<br>dass weder ein Wortelement, ein Punkt,<br>Unterstrich, noch ein Bindestrich ist.
err_email(4)  = "Nach dem '@'-Zeichen steht entweder gar<br>nichts, oder ein Zeichen, dass weder ein<br>Wortelement, ein Punkt, Unterstrich, noch<br>ein Bindestrich ist.
err_email(5)  = "Eine eMail-Adresse endet immer mit einem<br>Punkt auf den mindestens zwei, höchstens<br>aber vier Buchstaben folgen, wobei<br>Sonderbuchstaben nicht erlaubt sind.

RegExp_email    = new Array();
RegExp_email(0) = /[1]\w[\w|.|-]+@\w[\w|.|-]+.[a-zA-Z]{2,5}|museum$/;
RegExp_email(1) =/[2]/;
RegExp_email(2) =/@/;
RegExp_email(3) =/[3]+@/;
RegExp_email(4) =/[4]\w[\w|.|-]+@\w[\w|.|-]+/;
RegExp_email(5) =/.[a-zA-Z]{2,5}|museum$/;

Die Überprüfung erfolgt nach Übergabe der Eingabe über die folgende Funktion:

function ueberpruefung(form_nr, feld_nr, feld_art, pflicht)
{
  inhalt = document.forms[form_nr].elements[feld_nr].value;
  [...]
  email_pruefen(inhalt);
}

function email_pruefen(inhalt)
{
  for (var i=0; i<6; i++)
    if (!RegExp_email(i).test(inhalt))
    {
      // Fehlerausgabe über Variable err_email(i);
      break;
    }
}

Habe ich mit meinen Definitionen alle möglichen Varianten berücksichtigt oder sollten noch weitere Details aufgenommen werden ?

Gruss,
Andreas


  1. a-zA-Z0-9 ↩︎

  2. a-zA-Z\d ↩︎

  3. \w|.|- ↩︎

  4. a-zA-Z\d ↩︎

  1. Hi,

    var err_email = new Array();
    err_email(1)  = [...]

    err_email ist keine Funktion, die runden Klammern sind falsch.

    Habe ich mit meinen Definitionen alle möglichen Varianten berücksichtigt

    Du bist weit davon entfernt, RFC 2822 abgebildet zu haben. Statt dessen lässt Du sogar Adressen durch, die falsch sind.

    oder sollten noch weitere Details aufgenommen werden ?

    Du solltest lieber weitaus weniger detailliert sein - ob eine eMail-Adresse gültig ist oder nicht, bekommst Du mit so geringem Aufwand ohnehin nicht raus. Teste lieber auf ein _ganz_ simples Schema, welches zumindest keine gültige Adresse ausschließt. Ob sie existiert, erfährst Du ohnehin frühestens nach dem Versand einer Mail.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo,

      Gut, das war ein Leichtsinnsfehler :o)

      Habe nun die runden Klammern gegen eckige getauscht.
      Zudem habe ich den regulären Ausdruck geändert:

      /^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+-+)|([A-Za-z0-9]+.+)|([A-Za-z0-9]+++))*[A-Za-z0-9]+@((\w+-+)|(\w+.))*\w{1,63}.[a-zA-Z]{2,6}$/;

      Nun ergibt sich aber ein ganz anderes Problem:

      Ich habe ein Eingabefeld folgendermassen definiert:

      <input type="text" onblur="javascript:ueberpruefung(0,1,0,1)">

      Die Parameter sind von links nach rechts:

      Formular-Nr, Feld-Nr, Feld-Art, Pflichtfeld
      (Feld-Art: 0 = Namensfeld, 1 = eMail-Feld, 2 = Homepage, 4 = Kommentar)

      Das externe Javaskript wird im <head> eingebunden:

      <script language="javascript" type="text/javascript" src="JS_formular.js"></script>

      Der Funktionsaufruf in dieser Datei lautet folgendermassen:

      function ueberpruefung(form_nr, feld_nr, feld_art, pflicht)
      {
      inhalt = document.forms[form_nr].elements[feld_nr].value;
      laenge = inhalt.length();
      [...]
      }

      Wenn ich nun das oben genannte Eingabefeld verlasse, wird die Funktion nicht aufgerufen. Stattdessen erhalte ich die Fehlermeldung "Objekt erwartet".

      Was stimmt nicht ?

      Gruss, Andreas

      1. Hi,

        Zudem habe ich den regulären Ausdruck geändert:

        kennst Du die Beatles? Von denen stammt ein schönes Lied mit dem Titel "Let it be".

        Die RegExp muss noch um einiges (um _einiges_) komplexer werden, um standardkonform zu sein. Im Ergebnis wird sie einige Kilobyte lang sein. Bei Dir sind es erst ein paar Dutzend Byte, und die meisten davon falsch.

        <input type="text" onblur="javascript:ueberpruefung(0,1,0,1)">

        "javascript:" ist kein gültiger JavaScript-Befehl.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hi,

          auch wenn ich die Funktion über onblur="ueberpruefung(0,1,0,1)" aufrufe, erhalte ich die Fehlermeldung :-(

          Andreas

          1. Hi,

            auch wenn ich die Funktion über onblur="ueberpruefung(0,1,0,1)" aufrufe, erhalte ich die Fehlermeldung :-(

            ad 1) Eine Fehlermeldung reicht *nicht* als Fehlerbeschreibung aus.
            ad 2) Ich sehe wenig Sinn darin, auf Fehlersuche zu gehen, solange die Funktion bereits im Konzept fehlerhaft ist. *Du* *kannst* *mit* *so* *simplen* *RegExp* *keine* *Prüfung* *hinbekommen!*

            Cheatah

            --
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes