Validierung von Topleveldomains (preg_match)

  • Hallo,
    ich arbeite gerade an einem Registrationsskript für einen kleinen Onlinedienst.

    Dort muss man einfach seine Mailadresse 2x eingeben und bekommt dann ein Passwort zugesandt.
    Natürlich muss die Mailadresse vorher irgendwie abgecheckt werden.
    Dabei bin ich auf folgendes Problem mit den Toplevel-Domains gestoßen:

    Ich würde gerne überprüfen, ob die Topleveldomain nur aus Buchstaben besteht.
    Das kann man mit preg_match machen und es würde wohl etwa so aussehen:

    PHP
    preg_match('/^[a-z]+$/i', $toplevel)

    Ich verstehe aber den Syntax leider nicht ganz.
    Wofür steht das "+$" und das "i"?
    Eigentlich ist mir der komplette Ausdruck "/^[a-z]+$/i" ein kleines Rätsel.
    Ich weiß zwar, was das bedeutet, kann's aber nicht "wörtlich" übersetzen.
    php.net hat mich dahingehend leider auch nicht wirklich befriedigt.

    Kann mir das mal jemand aufschlüsseln?

  • Eigentlich ist mir der komplette Ausdruck "/^[a-z]+$/i" ein kleines Rätsel.

    • Das ^ steht für den Anfang (d. h. vor der Regel danach darf nichts stehen)
    • Das [a-z] steht für die Kleinbuchstaben von a-z
    • Das [a-z]+ bedeutet: Einer oder mehrere dieser Buchstaben hintereinander
    • Das $ steht für das Ende (d. h. nach der Regel davor darf nichts stehen)
    • Das i danach ist ein Modifier, damit Groß-/Kleinschreibung ignoriert wird.
  • Okay, das hab ich verstanden.

    Dann mal noch eine Frage:
    Muss/sollte ich bei der Verwendung vom preg_match immer diese Delimiter setzen, auch wenn ich keine Modifier benutze?

    Und muss man die auch bei preg_match_all setzen?

  • Muss/sollte ich bei der Verwendung vom preg_match immer diese Delimiter setzen, auch wenn ich keine Modifier benutze? Und muss man die auch bei preg_match_all setzen?

    Leider ja. Da in PHP den Pattern als Strings darstellt, muss man rund um die normalen Delimiter zusätzlich noch die Quotes des Strings machen, also z.B.

    PHP
    $text = "Für das Web ist PHP die Scripting-Sprache der Wahl.";
    if (preg_match("/web/i", $text)) {
       echo "Es wurde eine Übereinstimmung gefunden.";
    }

    In Perl braucht man dafür weniger Delimiter/Quotes, dafür aber
    den gefählichen Matching-Wurm:

    PHP
    $text = "Für das Web ist Perl die Scripting-Sprache der Wahl.";
    if( $text =~ m/web/i ) {
        print "Es wurde eine Übereinstimmung gefunden.";
    }

    Noch ein Tipp: Delimiter kann man bei bedarf austauschen, z.B. weil man die Schrägstriche innerhalb des Patterns braucht:

    PHP
    $text = "http://www.informatik-forum.at/newreply.php?do=newreply";
    if (preg_match("|informatik-forum.at/newreply|i", $text)) {
       echo "Es wurde eine Übereinstimmung gefunden.";
    }

    Brigitte


    P.S. noch mehr? FRIEDL,Jeffrey E. F. (2007): Reguläre Ausdrücke. O'Reilly. ISBN 3897217201.

    Brigitte Jellinek - http://multimediatechnology.at/web-communities/
    Ich unterrichte in einem Medieninformatik-Studium (BSc, MSc) mit Schwerpunkt Web Development
    Meine Themen: Ruby on Rails, Javascript, SCRUM, git, Test Driven Development,...

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!