Cheatah: Reg. Ausdruck mit "~"?

Beitrag lesen

Hi,

Ich möchte eine URL auf Syntaktische Korrektheit prüfen.

wenn Deine RegExp weniger als acht Kilobyte umfaßt (nur die RegExp!), ist sie falsch :-)

Such mal im Forums-Archiv nach "prospero:", dann findest Du die RFC-konforme RegExp; zwar in Perl-Syntax aufgebaut, aber sie sollte nicht allzu schwer auf PHP umzubasteln sein. Wahrscheinlich funktioniert Copy&Paste für den größten Teil.

Mit
if(!ereg("^http://([a-zA-Z0-9-]{2,}.)*[a-zA-Z]{2,3}((/[_a-zA-Z0-9-]+)*(.[_a-zA-Z0-9-]+)*)*$",$url)) { echo "falsch!"; }
erhalte ich auch wunderbar fehlerhafte URLs.

_Einige_ fehlerhafte URLs. Viele richtige werden vermutlich auch als falsch fehlinterpretiert.

Leider ist hier aber nicht berücksichtigt, daß der Verzeichnisname natürlich auch ein "~" enthalten darf.

Wie kommst Du denn darauf? RFC 1738 verbietet die Tilde; richtig wäre an der Stelle ein %7E.

Mir ist allerdings bewußt, daß viele ihre URL falsch angeben.

Erweitere ich aber die letzten beiden Teile jeweils auf [_a-zA-Z0-9-~]

Schau Dir mal die Bindestriche genauer an und überlege Dir ihre Bedeutung. Hinweis: Als letztes Zeichen der Zeichenklasse wird erkannt, daß die Sonderbedeutung nicht hinhaut.

bekomme ich ebenso einen Fehler wie bei [_a-zA-Z0-9-~].

Die Tilde ist nicht das Problem... :-)

Cheatah