201123Nov

Webentwicklung: Effektive URL-Ausdrücke in PHP

In Webanwendungen sind Validierungen ein wichtiges Thema, die nicht immer auf Anhieb gut zu lösen sind. Während beispielsweise HTML5 für Eingabefelder schon ein fertiges Attribut zur Validierung mitbringt, sind für andere Szenarien eigene Lösungen erforderlich. Eine beliebte Überprüfung, die etwas schwieriger zu erstellen ist, wäre so beispielsweise eine URL-Validierung. Durch reguläre Ausdrücke sollten hier entsprechende Maskierungen vorgenommen, so dass gefährliche Einträge oder Umgehungsversuche nicht an die Anwendung bzw. die Datenbank übergeben werden.
Mathias Bynens hat zu dieser Thematik eine Matrix zusammengestellt, in der vordefinierte URLs durch unterschiedliche Ausdrücke validiert werden.

In search of the perfect URL validation regex

In den Kopfzeilen der Tabelle finden sich die Autoren von regulären Ausdrücken, die unterschiedlich gut funktionieren. Jeder reguläre Ausdruck ist unterschiedlich lang: Während die Spoon Library 979 Zeichen benötigt, schlägt der Ausdruck von Diego Perini nur 502 Zeichen zu Buche. Seine Validierung beinhaltet auch die Verwendung von IP-Adressen im Bereich von 1.0.0.0 bis 223.255.255.255. Der "S"-Modifier wurde in den Tests zur Erhöhung der Geschwindigkeit eingesetzt, sollte aber in einer produktiven Umgebung nicht verwendet werden.
Wichtig bei einer Validierung ist auch die Überprüfung des HTTP-Protokolls und somit des Präfixes "http://". Zu diesem Bereich gibt es in der Übersicht eine separate Tabelle, in der diverse Beispiele für mögliche URLs aufgeführt sind.

Kommentare

Don schrieb am 24.11.2011 #1

ja, also wenn ich das richtig verstehe ist Diego Perinis regex der einzigste, der alle URL’s perfekt validiert?
Aber bzgl. der Länge des regex von stephenhay auch nicht schlecht?
Spoon Library ist wohl nicht so toll, bei so vielen Zeichen??

..naja, nur mal so schnell einen Blick drüber geworfen :)

Matthias schrieb am 04.12.2011 #2

Ja, die Zeichenlänge macht natürlich schon einen Unterschied aus. Aber nur weil ein RegEx-Ausdruck länger ist, bedeutet das ja nicht, dass er automatisch schlechter ist ;-)
Kompakt ist immer gut und ich denke, der Ausdruck von Diego erfüllt den Zweck der URL-Validierung schon sehr gut.