Hallo zusammen,
ich suche schon seit 2 Stunden und bastel was zusammen, aber ich komme auf keinen grünen Zweig. Simples Problem: Ich will überprüfen, ob eine Variable eine gültige URL ist und keine bösen Zeichen enthält. Der Ausdruck soll ziemlich tolerant sein:
www.test.de
test.de
http://www.test.de
http://test.de
http://www.test.co.uk
http://test.co.uk
test.co.uk
www.test.co.uk
https://www.test.co.uk
https://test.co.uk
sollen mindestens möglich sein, ich habe sicher die eine oder andere gültige Url vergessen. Gibt es da was? Ich habe folgendes gefunden, was aber wohl nicht so richtig funktioniert:
function pruefe_url($variable)
{
//return preg_match("(([\w]+:)?//)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\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);
return !(ereg("(([\w]+:)?//)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\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})*)?", $variable));
}
if (pruefe_url('www.test.de')) echo 'gültig'; else echo 'ungültig'; echo '<br>';
if (pruefe_url('test.de')) echo 'gültig'; else echo 'ungültig'; echo '<br>';
if (pruefe_url('http://www.test.de')) echo 'gültig'; else echo 'ungültig'; echo '<br>';
if (pruefe_url('http:/<>')) echo 'gültig'; else echo 'ungültig'; echo '<br>';
gibt aus:
gültig
gültig
gültig
gültig
und zumindest die letzte Ausgabe sollte eigentlich ungültig sein...
viele Grüße,
Dirk