Cheatah: reguläre Ausdrücke für Homepage und Mailadressen

Beitrag lesen

Hi,

da ich mich erst seit kurzem überhaupt etwas mit regulären Ausdrücken beschäftige und noch nicht den Durchblick habe (http://www.php-resource.de/tutorials/read/10/1/), wollte ich mal eure Meinung zu folgenden Ausdrücken haben:

bei URLs und Mailadressen existieren viel zu viele Fehlerquellen (besonders bei letzteren), als dass es sich lohnen würde, von den RFC-konformen RegExp abzuweichen, die immer wieder in diesem Forum gepostet und verlinkt werden.

/^

"String beginnt mit", soweit so gut.

[(http://)|(ftp://)|(https://)]

"Das nächste Zeichen muss '(', 'h', 't', 'p', ':', '/', ')', '|', 'f' oder 's' sein" - das hat mit URLs nur wenig zu tun. Übrigens hast Du ziemlich viele Zeichen doppelt in die Zeichenklasse geschrieben.

[a-z|ä|ö|ü|ß|.|_|-]+

"Ein oder mehrere 'a'-'z', '|', Umlaute, '.', '_' oder '-'" - dito. Wenn Du internationale Domains beachten willst, dann tue dies bitte mit _allen_ erlaubten Sonderzeichen. Der Unterstrich hat im Hostnamen nichts verloren, genauso wenig wie "...", was bei Dir erlaubt wäre. Davon abgesehen sind wir hier natürlich noch gar nicht beim Hostnamen, weil der vorherige Teil der RegExp nicht stimmt.

[a-z|ä|ö|ü|ß]{1}

"Ein bis ein Buchstabe oder Umlaut" - bitte wie? Vom überflüssigen "{1}" abgesehen ist "example.17n" wenig sinnvoll, "172.251.0.12" hingegen schon.

(.){1}

"Ein bis ein Punkt" - wo genau in der URL glaubst Du zu sein?

[a-z|ä|ö|ü|ß]{2,4}

Äh, aha. Vermutlich willst Du hier ".com", ".de", ".info" usw. abfrühstücken, also auch ".museum", aber nicht ".bäh". Hast Du Dir eigentlich schon mal angesehen, wie eine URL aufgebaut ist?

[.]*

"Beliebig viele Punkte" - nein, die sind direkt nach dem Hostnamen nicht erlaubt. Statt dessen kommt entweder eine Port-Angabe, oder der Localpart der URL.

/i

"Das ganze case-insensitive, und es darf folgen was will."

a) bin ich mit dem . am Ende natürlich nicht zufrieden,

Ich bin mit _nichts_ in Deiner RegExp zufrieden. Richte Dich bitte nach den bestehenden, standardkonformen Lösungen.

b) was für Protokolle gibt's noch?

Beispielsweise "pros pero". Das Leerzeichen dient dazu, dass derjenige, der danach sucht, die richtigen Artikel findet, nicht diesen hier.

Kann man überhaupt alle beachten?

Je nach Definition von "alle": ja.

Und was ist, wenn der Vorsatz einfach fehlt und z.B. bei einer Usereingabe nur www.blabla.de eingegeben wurde?

Wenn Du URLs matchen willst, ist "www.blabla.de" eh nicht gefordert.

c) was ist mit Sonderzeichen, Umlauten, %20 und Co??

Die stecken in dem Teil, den Du gepflegt ausgelassen hast.

2.Mailadressen:

Das lasse ich gleich weg, die RegExp ist eh falsch. Bedenke, dass z.B. "I'm a valid em@il-address!"@example.com eine valide E-Mail-Adresse ist, invalid.@example.com jedoch nicht.

Cheatah

--
X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
X-Will-Answer-Email: No
X-Please-Search-Archive-First: Absolutely Yes