URL Validierung

Hallo,

ich suche eine RegEx für die URL-Validierung. Wichtig für mich ist, dass
solche Adressen zugelassen werden, wie:

http://www.domain.com || https://domain.com ||
https://sub.domain-name.com:8080 ||
http://domain.com/dir%201/dir_2/program.ext?var1=x&var2=my%2 0value ||
domain.com/index.html#bookmark

Auf folgender Seite habe ich eins gefunden:
http://regexlib.com/REDetails.aspx?regexp_id=1374
Leider schaffe ich es nicht an PHP anzubinden. Ich habe folgendes versucht:

if
(!ereg("(([\w]+:)?//)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|% [a-fA-f\d]{2,2})+)? [at] )?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2, 4}(:[\d]+)?(/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\ d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2}) *)?",$url))
{
echo "FALSCH";
} else {
echo "OK";
}
Leider wird keine Adresse als richtig erkannt.
Was mache ich falsch?

Gibt es vielleicht eine andere RegEx, mit der man die URL überprüfen kann?

Danke im Voraus

Monika
Renata Nowak [ Do, 15 November 2007 11:22 ] [ ID #1871703 ]

Re: URL Validierung

Monika Nowak wrote:

> ich suche eine RegEx für die URL-Validierung. Wichtig für mich ist, dass
> solche Adressen zugelassen werden, wie:
>
> http://www.domain.com || https://domain.com ||

Alle gültigen URL sollten zugelassen werden die Im Rahmen der Anwendung
Sinn ergeben.

> Auf folgender Seite habe ich eins gefunden:

Eins? :-) Regular Expression (Regülärer Ausdruck) ist männlich

> http://regexlib.com/REDetails.aspx?regexp_id=1374

Der Ausdruck funktioniert ganz ordentlich. Wenn Du hier als Einsatzzweck
das öffentliche Internet hast würde ich aber davon abraten da er
ebenfalls z.B. http://localhost als gültig ansieht, was Du sicher nicht
willst.

> Leider schaffe ich es nicht an PHP anzubinden. Ich habe folgendes versucht:
>
> if (!ereg(....

Warum verwendest Du keine Funtion die mit Perl-Kompatibler Regex-Syntax
umgehen kann sondern eine für POSIX kompatible Syntax? ereg ist nur ne
Krücke die noch dazu extrem unperformant ist.

Du suchst nach preg_match().

Aber beachte das der Ausdruck nur dann funktioniert wenn Du Ihn an die
PHP-Eigene Schreibweise anpaßt!
http://www.php.net/manual/de/reference.pcre.pattern.syntax.p hp

Was ich meine ist: Du mußt den Regex noch in Delimiter-Zeichen
einschließen und die bei vorkommen im Regex selbst, dort mit einem
Backslash maskieren.

MfG, Ulf

--
_,
_(_p> Ulf [Kado] Kadner
\<_)
^^
Ulf Kadner [ Do, 15 November 2007 12:10 ] [ ID #1871705 ]

Re: URL Validierung

Hallo Ulf,

> Eins? :-) Regular Expression (Regülärer Ausdruck) ist männlich
Danke für den Tipp :) Deutsch ist halt nicht meine Muttersprache :)


> Der Ausdruck funktioniert ganz ordentlich. Wenn Du hier als Einsatzzweck
> das öffentliche Internet hast würde ich aber davon abraten da er
> ebenfalls z.B. http://localhost als gültig ansieht, was Du sicher nicht
> willst.

Kennst Du vielleicht einen Ausdruck, der dies evtl. auch berücksichtigt?

> Was ich meine ist: Du mußt den Regex noch in Delimiter-Zeichen
> einschließen und die bei vorkommen im Regex selbst, dort mit einem
> Backslash maskieren.

Das ist mir leider nicht ganz klar. Welches Zeichen genau meinst Du?

Gruß

Monika
Renata Nowak [ Do, 15 November 2007 13:27 ] [ ID #1871707 ]

Re: URL Validierung

Monika Nowak schrieb:
> Hallo Ulf,
>
>> Eins? :-) Regular Expression (Regülärer Ausdruck) ist männlich
> Danke für den Tipp :) Deutsch ist halt nicht meine Muttersprache :)
>
>
>> Der Ausdruck funktioniert ganz ordentlich. Wenn Du hier als
>> Einsatzzweck das öffentliche Internet hast würde ich aber davon
>> abraten da er ebenfalls z.B. http://localhost als gültig ansieht, wa=
s
>> Du sicher nicht willst.
>
> Kennst Du vielleicht einen Ausdruck, der dies evtl. auch berücksichti=
gt?
>
>> Was ich meine ist: Du mußt den Regex noch in Delimiter-Zeichen
>> einschließen und die bei vorkommen im Regex selbst, dort mit einem
>> Backslash maskieren.
>
> Das ist mir leider nicht ganz klar. Welches Zeichen genau meinst Du?

Die PCRE selber ist von Delimitern (Begrenzern) umschlossen damit der
Parser erkennen kann wann selbige Aufhoert und ein Modifer anfaengt.

$pattern =3D '#blubb#i'; // blubb ist die PCRE und i ein Modifer
$pattern =3D '#bl\#ubb#i'; // Kommt der gewaehlte Begrenzer auch in der
PCRE vor muss er escaped werden. Alternative ist ein anderes Zeichen als =

Begrenzer waehlen.

Gruss
Joerg

--
TakeNet GmbH, Geschaeftsfuehrer Wolfgang Meier
97080 Wuerzburg Tel: +49 931 903-2243
Alfred-Nobel-Straße 20 Fax: +49 931 903-3025
HRB Wuerzburg 6940 http://www.takenet.de
Joerg Behrens [ Do, 15 November 2007 14:08 ] [ ID #1871708 ]

Re: URL Validierung

Monika Nowak wrote:
> Hallo,
>
> ich suche eine RegEx für die URL-Validierung. Wichtig für mich ist,
> dass solche Adressen zugelassen werden, wie:
>
> http://www.domain.com || https://domain.com ||
> https://sub.domain-name.com:8080 ||
> http://domain.com/dir%201/dir_2/program.ext?var1=x&var2=my%2 0value ||
> domain.com/index.html#bookmark

Hat sich schon jemand mit der Filter-Extension von PHP 5 auseinandergesetzt?
Taugt das was?

http://de3.php.net/manual/de/ref.filter.php

Gruß
Johannes

--
Emails ohne "[nospam]" im Betreff werden kommentarlos gelöscht.
Johannes Mueller [ Do, 15 November 2007 15:35 ] [ ID #1871711 ]

Re: URL Validierung

Hallo,

> $pattern = '#blubb#i'; // blubb ist die PCRE und i ein Modifer
> $pattern = '#bl\#ubb#i'; // Kommt der gewaehlte Begrenzer auch in der
> PCRE vor muss er escaped werden. Alternative ist ein anderes Zeichen als
> Begrenzer waehlen.

danke für die Info.
Ich muss aber noch mal nachfragen

Hier ist der Regex, wie ich ihn ursprünglich hatte:
if
(!ereg("(([\w]+:)?//)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|% [a-fA-f\d]{2,2})+)? [at] )?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2, 4}(:[\d]+)?(/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\ d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2}) *)?",$url))
{

und so habe ich es geändert:
if
(!preg_match("#(([\w]+:)?//)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([ \d\w]|%[a-fA-f\d]{2,2})+)? [at] )?([\d\w][-\d\w]{0,253}[\d\w]\.)+ [\w]{2,4}(:[\d]+)?(/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?( [-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(\#([-+_~.\d\w]|%[a-fA-f\ d]{2,2})*)?#",$url))
{

Er funktioniert aber nicht richtig, er erlaubt jede Zeichenkette. Was
mir nicht klar ist, an welche Stelle steht hier der Modifikator??? Oder
muss ich ihn noch selbst einbauen?

Danke im Voraus!

Monika
Renata Nowak [ Di, 20 November 2007 08:59 ] [ ID #1875208 ]
PHP » de.comp.lang.php.misc » URL Validierung

Vorheriges Thema: gibt es sowas wie child::Eigenschaft ?
Nächstes Thema: Doctype bei HTML Mails nicht erlaubt?