Regular Expressions in PHP

Dieses Thema Regular Expressions in PHP im Forum "Webentwicklung, Hosting & Programmierung" wurde erstellt von Michael_B, 8. Jan. 2003.

Thema: Regular Expressions in PHP Hallöchen Gemeinde, ich muss ein PHP Skript schreiben, in dem aus einer DB Telefonnummern (weltweit) und URLs...

  1. Hallöchen Gemeinde,

    ich muss ein PHP Skript schreiben, in dem aus einer DB Telefonnummern (weltweit) und URLs ausgelesen und auf syntaktische Korrektheit überprüft werden sollen. Am einfachsten geht das natürlich mit Regular Expressions. Allerdings komm ich nicht auf die entsprechenden Regeln. Kann mir da jemand helfen?

    Ich suche für die Telefonnummern eine Regel, die folgendes beachtet:
    1. Nummern müssen mit einem + beginnen (+49-...),
    2. alles was hinter dem + steht kann nur numerische Werte haben,
    3. Ausnahme: Trennzeichen, wie -, / oder (blank) sind erlaubt,
    4. hinter dem + darf kein Trennzeichen stehen, es muss eine Nummer/Zahl sein.
    Mögliche Nummern wären hier also:
    +123-456-7890123-45
    +123 456 7890123 45
    +123/456/7890123/45
    oder auch mixed: +123-456/7890123 45

    Die Regeln der URLs sind ja klar:
    1. Beginnt immer mit http:// (sind auch immer HTTP-URLs),
    2. Aufbau der URL,
    3. hinter der Top Level Domain (z. B. .com) kommt kein expliziter Dateiaufruf, die URL endet also mit der TLD oder auch mit der TLD gefolgt von einem /. Aber dahinter darf nix mehr kommen.

    Wäre kewl, wenn mir da jemand die entsprechenden Parameter für den preg_match()-Befehl geben könnte.

    Dankeschön.
     
  2. Hi,

    Für die Nummern:
    if (preg_match(/^\+[0-9]{1}[0-9\s\-\/]*$/i,$nummer)) echo ok;

    Für den URL:
    if (preg_match(/^(http:\/\/)?[0-9a-z\-]*\.[0-9a-z\-]*\.[0-9a-z\-]*[\/]?$/i,$URL)) echo ok;
     
  3. Hi

    Stimmt nicht ganz. Hoffe die funktionieren so.
    @Jana, die Delimiter dürfen in der Expression selber nicht mehr vorkommen.

    Für die Nummern:
    if (preg_match(!^\+[0-9]{2,3}([0-9]+[\s\-\/]?)+$!i,$nummer)) echo ok;

    Für den URL:
    if (preg_match(!^http:\/\/([0-9a-z][0-9a-z-]*[0-9a-z]\.)+[a-z]{2,6}\/?$/i,$URL)) echo ok;

    Gruß, Michael
     
  4. Vielen Dank, ich werde morgen beide Versionen mal ausprobieren und mich dann wieder melden.
     
  5. Hm? Bei mir funktioniert es so. Was genau soll daran falsch sein?
     
  6. Hi

    Durch das Escapen darf man sie wohl doch verwenden, hatte das anders in Erinnerung.
    meine /^http:\/\/(..)$/i

    Gruß, Michael
     
  7. Also... habe im endeffekt folgende Funktion genommen.
    preg_match(/^(http:\/\/)?([0-9a-z][0-9a-z-]*[0-9a-z]\.)+[a-z]{2,6}\/?$/i,$homepage.
    Demnach ist es egal, ob die URL ein http:// am Anfang hat oder nicht. Habe allerdings jetzt bemerkt, dass es doch URLs in unserer Datenbank gibt, die nach der TLD noch etwas anderes stehen haben. Das was da noch steht, sind aber keine Dateien, sondern lediglich Verzeichnisse. Die o. a. Funktion liefert erkennt keine URLs, die z. B. folgende Struktur haben: www.irgendwas.nochwas.tld/verzeichnis oder
    www.irgendwas.nochwas.tld/verzeichnis/
    Habe versucht, das selbst hinzubiegen, dass preg_match das erkennt, aber irgendwie scheine ich zu doof dafür zu sein...

    Könnte ich da nochmal etwas von eurem geistigen Intellekt schnorren?
    Danke.

    PS: Soweit ich mich erinnern kann, war die Funktion von PCDReitz nicht ganz in ordnung, da dort keine URLs gefunden wurden, die eine Subdomain haben (z. B. www.irgendwas.nochwas.tld). Sondern nur Standard-URLs vom Format www.irgendwas.tld
     
  8. Noch etwas:
    für Telefonnummern hab ich mich für diese Funktion entschieden:
    preg_match(!^\+[1-9]{1,4}([0-9]+[\s\-\/]?)+$!i,$phone
    Allerdings haben wir in der DB auch einige Nummern, die nicht da reinpassen. Fragt mich aber nicht, warum. Ich kann keine besonderen Unterschiede (zu Nummern, die passen) feststellen. Solche Nummern sind z. B. +1-530-888-8871 oder +7-95-956-9954

    Kann mir jemand sagen, warum die nicht in das Pattern passen?

    Nochmals danke
     
  9. Hi

    Sorry, da hatte ich was falsch:
    preg_match(!^\+[1-9]{1,4}([\s\-\/]?[0-9]+)+$!i,$phone);
    So sollte es gehen.

    Wegen den URLs.
    preg_match(/^(http:\/\/)?([0-9a-z][0-9a-z-]*[0-9a-z]\.)+[a-z]{2,6}\/?.*$/i,$homepage);
    würde dann gehen, aber alles nehmen was hintendran steht, also auch Verweise auf Dateien, aber woher soll man auch wissen ob es eine Datei oder ein Verzeichnis ist.

    Gruß, Michael
     
  10. Jo danke, funzt alles wie erwartet.
     
Die Seite wird geladen...

Regular Expressions in PHP - Ähnliche Themen

Forum Datum
Suche Desktopsearch mit Regulären Ausdrücken Windows XP Forum 29. Mai 2009
Reguläre Ausdrücke Windows XP Forum 13. Dez. 2006
xml-schema und reguläre Ausdrücke Webentwicklung, Hosting & Programmierung 2. Sep. 2005
[TIPP] PHP-Reguläre Ausdrücke Windows XP Forum 26. Juli 2005