Georg Dürkop: Escapesequenzen? Zeichen? usw.

Ich habe mir sämtliche Dokumentationen über PHP heruntergeladen und angeschaut, ich finde auch haufenweise Tabellen mit Escapesequenzen/Zeichen und ihren bedeutungen, seider finde ich keine, die genau das zeigt was ich suche.

Für eine E-Mail überprüfung habe ich mir einen Sckript heruntergeladen, habe aber nicht verstanden was die Zeichen oder Escapesequenzen im einzelnen bedeuten.

if (ereg("[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+.)+([a-zA-Z]{2,3})", $mail))...

Kann mir das jemand erläutern?
Nun weisst mich sicher jemand darauf hin, dass ich in Self PHP mal unter ereg() suchen soll. Um dies zu vermeiden; ich kenne den Syntax von ereg() allerdings sind in Self PHP wie auch in der PHP eigenen Dokumentation Zeichen wie das . nicht erklährt.

Ich bitte um Hilfe

GRD

  1. Für eine E-Mail überprüfung habe ich mir einen Sckript heruntergeladen, habe aber nicht verstanden was die Zeichen oder Escapesequenzen im einzelnen bedeuten.

    if (ereg("[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+.)+([a-zA-Z]{2,3})", $mail))...

    Kann mir das jemand erläutern?
    Nun weisst mich sicher jemand darauf hin, dass ich in Self PHP mal unter ereg() suchen soll. Um dies zu vermeiden; ich kenne den Syntax von ereg() allerdings sind in Self PHP wie auch in der PHP eigenen Dokumentation Zeichen wie das . nicht erklährt.

    Das halte ich für ein Gerücht, zumindest was die PHP-Anleitung angeht, Du solltes mehr stöbern :)

    \ ist (wie eigentlich überall) ein Escape-Zeichen, das mit dem nachfolgenden irgendwas anstellt. Der Punkt steht ansich für ein beliebiges Zeichen in der Quelle, zusammen mit dem \ davor heißt das dann aber einfach nur "ein Punkt".

    Ich behaupte mal, daß der Teil vor dem @ eine Zeichenkette aus "Buchstaben, Zahlen, dem Unter- und dem Bindestrich sowie dem Punkt" darstellt, wobei der Punkt nicht als erstes erscheinen darf (deshalb die Wiederholung von "[_a-zA-Z0-9-]").
    Der Teil hinterm @ ist wiederum eine Zeichenkette aus "Buchstaben und Ziffern sowie dem Bindestrich, gefolgt von einem Punkt" (und das ganze gern auch mehrmals) und beendet durch zwei oder drei Buchstaben.

    Ich bitte um Hilfe

    Die PHP-Anleitung hilft Dir weiter, insbesondere die Seite "Pattern Syntax" (http://www.php.net/manual/de/pcre.pattern.syntax.php) sowie die Hauptseite zu den regulären Ausdrücken nach POSIX (http://www.php.net/manual/de/ref.regex.php). Beide sollten sich auch in Deiner runtergeladenen Version finden, inklusive des Hinweises auf die manpage regex.7 und welchen Standard PHP verwendet.

    Und am Ende der (Netz-)Seite zu ereg (http://www.php.net/manual/de/function.ereg.php) finden sich auch noch einige Verweise zu weiterführenden Anleitungen.

    Ich für meinen Teil bin bis jetzt immer mit der genannten PCRE-Seite, die in der PHP-Anleitung drin ist, ausgekommen.

    Gruß,
      soenk.e

    1. Moin!

      Ich behaupte mal, daß der Teil vor dem @ eine Zeichenkette aus "Buchstaben, Zahlen, dem Unter- und dem Bindestrich sowie dem Punkt" darstellt, wobei der Punkt nicht als erstes erscheinen darf (deshalb die Wiederholung von "[_a-zA-Z0-9-]").
      Der Teil hinterm @ ist wiederum eine Zeichenkette aus "Buchstaben und Ziffern sowie dem Bindestrich, gefolgt von einem Punkt" (und das ganze gern auch mehrmals) und beendet durch zwei oder drei Buchstaben.

      Und das ist ziemlich böse. Dieser reguläre Ausdruck geht davon aus, daß die Top-Level-Domains nur zwei oder drei Buchstaben haben. Stimmt ja auch meist, bis auf die neue TLD .info - das sind vier Buchstaben!

      Also bitte anpassen. Am besten ist, wenn überhaupt keine Beschränkung der TLD-Länge vorgenommen wird, denn theoretisch könnte die beliebig lang oder kurz sein.

      - Sven Rautenberg

      1. Der Teil hinterm @ ist wiederum eine Zeichenkette aus "Buchstaben und Ziffern sowie dem Bindestrich, gefolgt von einem Punkt" (und das ganze gern auch mehrmals) und beendet durch zwei oder drei Buchstaben.

        Und das ist ziemlich böse. Dieser reguläre Ausdruck geht davon aus, daß die Top-Level-Domains nur zwei oder drei Buchstaben haben. Stimmt ja auch meist, bis auf die neue TLD .info - das sind vier Buchstaben!

        "640K ought to be enough for anybody." (Bill Gates, 1981)

        Wir machen alle mal kleine Fehler ;)
          soenk.e

  2. Hallo Georg,

    das . steht einfach für einen normalen Punkt, da der einfache Punkt
    in regulären Ausdrücken für ein beliebiges Zeichen steht.

    Eine ganz brauchbare Kurzübersicht über die Syntax von regulären Ausdrücken
    befindet sich auf folgender Seite:
    http://www.infodrom.north.de/~joey/Linux/Toolbox/grep.html
    knapp unterhalb der Seitenmitte. Thema der Seite ist zwar grep bzw. egrep,
    die Syntax von ereg in PHP scheint aber der von egrep weitestgehend
    zu entsprechen.

    Schönen Gruß

    Rainer