noch eine Frage zum Thema "URL Validierung"

Hallo,

da mein Posting zur URL Validierung schon ein paar Tage zurück liegt und
ich auf meine letzte Frage (siehe unten) keine Antwort bekommen habe,
hoffe ich, dass mir jemand jetzt weiter helfen könnte... Danke im Voraus!

Monika

-----


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 [ Mi, 21 November 2007 16:15 ] [ ID #1876048 ]

Re: noch eine Frage zum Thema "URL Validierung"

Monika Nowak wrote:

>> $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

Irrtum.

>mir nicht klar ist, an welche Stelle steht hier der Modifikator??? Oder

Die pattern modifiers fangen hinter dem rechten Delimiter (bei Dir #)
an. Du hast keine pattern modifier.

>muss ich ihn noch selbst einbauen?

Kommt drauf an, ob Du pattern modifiers brauchst :)

Siehe
http://www.php.net/manual/de/reference.pcre.pattern.modifier s.php

Der Grund, warum Du keine Antwort bekommen hast, ist ganz einfach:
URL-Validierung (wie auch eMail-Adressen-Validierung) interessiert die
meisten nicht. Das funktioniert so gut wie nie erwartet. Zudem: Wenn
ein Benutzer etwas falsches eingeben will, dann schafft er es auch -
und selbst wenn es am Ende http://example.com ist.

Wenn Du aus irgendwelchen Gründen aber trotzdem die erlaubte
Eingabemenge einschränken willst, überlege Dir "Grenzadressen" und
teste sie, z.B. so:

$url = array(
'falsche url www.example.com falsche url',
' example.com',
'127.0.0.1',
'localhost',
'example.com',
'www.example.com',
'http://127.0.0.1',
'http://127.0.0',
'http://example.com',
'HTTP//example.com',
'http:/example.com',
'http:example.com',
'ftp:example.com',
'httpexample.com',
'http://example.com',
'http://www.example.com',
'http://example.example.com',
'http://example.example',
'http://example.example.example',
'http://www.example.example#test',
'http://www.example.example#test?id=3&a=2something! [at] (*#~^~!# $'
);


// Hier deine regulären Ausdrücke

foreach ($url as $u)
{
echo sprintf('%s: %-40s %s', 'ereg', $u,

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})*) ?",$u)
? "OK\n"
: "NOT OK\n");
}


foreach ($url as $u)
{
echo sprintf('%s: %-40s %s', 'preg', $u,

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})*)?#",$u)
? "OK\n"
: "NOT OK\n");
}


Du siehst schnell, dass Dein regulärer Ausdruck vermutlich nicht wie
gewünscht arbeitet. Wenn Du URL-Validierung tatsächlich brauchst,
schau Dir PHPs Filter Funktionen an. Anschaulich kannst Du Dir auch da
darstellen lassen, ob alle von Dir erwünschten Adressen durchgelassen
werden z.B. mittels:

foreach ($url as $u)
{
var_dump(filter_var($u, FILTER_VALIDATE_URL,
FILTER_FLAG_SCHEME_REQUIRED));
}

Schöne Grüße, Steffen
steffen bruentjen [ Mi, 21 November 2007 16:55 ] [ ID #1876051 ]

Re: noch eine Frage zum Thema "URL Validierung"

Vielen Dank! :)
Monika
Renata Nowak [ Fr, 23 November 2007 08:40 ] [ ID #1877434 ]
PHP » de.comp.lang.php.misc » noch eine Frage zum Thema "URL Validierung"

Vorheriges Thema: Utf-8 und Sortierung eines Arrays
Nächstes Thema: pfd AddTextWrap Problem