Sven Rautenberg: Regex für die neuen Umlautdomains

Beitrag lesen

Moin!

Da es nun die Umlautdomains gibt, werde ich wohl oder übel die entsprechende Regex die das macht umschreiben müssen. Meine bisherige Lösung sieht so aus:

$text=preg_replace("/(https?://)(www.)?([a-zA-Z0-9-]+.)?([a-zA-Z0-9-]+.[a-zA-Z]{2,5})([a-zA-Z0-9.-?~/=%]+[/~a-zA-Z0-9])?/","<a href="\1\2\3\4\5">\1\2\3\4\5</a>",$text);

Dein regulärer Ausdruck ist in mehrerer Hinsicht fehlerhaft.

Punkt 1: "Umlautdomains" bedeutet nicht nur, dass jetzt "äöüß" im Namen vorkommen dürfen, sondern wesentlich mehr Zeichen. Wie erwähnt wurde: Russisch, Chinesisch, Japanisch...

Punkt 2: Warum zum Teufel müssen Domains mit "www" beginnen? Warum kann ein Domainnamen nur eine begrenzte Anzahl an Teilen enthalten (die Punkte in der Domain sind bei deinem Ausdruck begrenzt)? Warum gehst du von einer maximalen Top-Level-Domain-Länge von fünf aus - was ist mit ".museum"?

Mit anderen Worten: Du erfaßt ohnehi nur eine Teilmenge existierender Domains und setzt diese in Links um - warum machst du dir dann Gedanken über die Umlaute.

Was besser wäre: Entweder setzt du Links nicht automatisch, sondern nur auf Anforderung des Benutzers um (so wie hier im Forum auch, mit < >, siehe </faq/>), oder du setzt einfach einen wesentlich freizügigeren Regex ein, der auf das Vorhandensein von "http://" prüft und alles, was dahinter kommt (ausgenommen Leerzeichen) in einen Link wandelt). Und mit "alles" ist dann wirklich alles gemeint, also [^ ]+ im Regex.

- Sven Rautenberg

--
Die SelfHTML-Developer sagen Dankeschön für aktuell 17573,88 Euro Spendengelder!