Tach!
ich bin gerade dabei eine kleine funktion zu basteln, die aus verschiedenen texten rufnummern filern und ersetzen soll
ich hab da mal ein anfang gemacht und mich mit regex rumgeschlagen ... holla die waldfee ... wer es kann liebt es bestimmt, aber ich hasse es ;)
Du kannst es dir leichter machen, wenn du nicht einen Riesenausdruck zu bauen versuchst, sondern für jedes Muster einen eigenen Ausdruck erstellst. Diese lässt du nacheinander auf die Nummer los und schaust, ob irgendeiner passt.
Ländervorwahl
_Landes_vorwahl, es ist ja die eines Landes, nicht mehrerer (mit Ausnahme von Zone 7).
[+][0-9]{2,4}[ |/|.|-]? +49_
In []-Klammern steht eine Zeichenklasse. In der gelten andere Regeln für Sonderzeichenbedeutungen. Das | ist dort nur ein normales Zeichen, du scheinst es jedoch als Oder verwenden zu wollen. Es ist auch nicht erforderlich, Zeichen außer ] zu maskieren, schadet aber auch nicht. Allerdings hat das - als Bereichskennzeichnung eine Bedeutung - oder auch nicht, je nachdem wo es steht. Am Anfang und am Ende steht es für sich selbst, mittendrin nur mit Maskierung.
|00[0-9]{2,4}[ |/|.|-]? 0049_
Hier wäre 00[1-9]\d{1,3} richtiger, weil die erste Ziffer nach der IVAZ[*] keine 0 sein kann. Und \d steht für Ziffern, kann also [0-9] ersetzen.
preg_match_all("~([+][0-9]{2,4}[ |/|\.|\-]?|00[0-9]{2,4}[ |/|\.|\-]?|0|\(0)([0-9]{2,5}[\)]?[ |/|\.|\-]?)([\- 0-9]+)~m",$notiz['msg'],$telefonnummern);
Selbst wenn ich den Ausdruck um überflüssige Zeichen erleichtere
~(+\d{2,4}[ /.-]?|00\d{2,4}[ /.-]?|0|(0)(\d{2,5})?[ /.-]?)([-\d]+)~m
ist er mir noch zu komplex, um ihn im Moment vollständig nachzuvollziehen.
0049 (030) 123 45678
Das ist eine sehr ungünstige falsche Schreibweise. Abgesehen davon, dass zwar viele Länder die 00 als IVAZ haben, aber eben nicht alle, ist es selbst für die 00-Länder nicht eindeutig, was der Teil nach der Landesvorwahl zu bedeuten hat. Die Klammern deuten Optionalität an, aber vom Ausland aus benötigt man die 30, nicht aber die führende 0 - in diesem Fall. Das ist insofern missverständlich, als es Länder gibt, bei denen die 0 mitgewählt werden muss. Und um das Kraut noch fett zu machen, gibt es in Italien beispielsweise Ortsnetzkennzahlen mit und ohne 0. In Tschechien ist die 0 auch nicht ohne Bedeutung.
+49 (0)30 123 45678
wäre eine noch einigermaßen akzeptable und verbreitete Schreibweise, weil die 0 aus dem Inland mitgewählt werden muss, aus dem Ausland aber nicht. Einfach zu verstehen ist es trotzdem nicht. Vermutlich aber hast du hier keinen Spielraum und musst den Mist verarbeiten, den du bekommst. Herzliches Beileid.
kann mir das jemand erklären?
Zum eigentlichen Problem kann ich dir grad nur den eingangs erwähnten Tipp geben.
btw: für optimierungsvorschläge die NICHT die übersichtlichkeit für anfänger flöten lassen gehen bin ich auch dankbar ;)
Definiere Übersichtlichkeit.
[*] IVAZ = internationale Verkehrsausscheidungsziffer (keine offizielle Abkürzung)
dedlfix.