Regulärer Ausdruck: URL prüfen

Emu-Emsen

Mitglied
Hallo,

ich möchte eine URL mittels regulärem Audruck auf Korrektheit prüfen.

http:// muss immer vorhanden sein, www kann vorhanden sein. So siehts aus:

Code:
$regexp_homepage = "/^http://(www.)?[a-zA-Z0-9-]{3,64}.[a-zA-Z]{2,4}$/";

if (!eregi($regexp_homepage, $homepage)) {
    echo "Fehler: Die angegebene Homepage ist nicht korrekt!";
}
Leider wird immer die Fehlermeldung ausgegeben.

Was ist an dem regulären Ausdruck nicht Kkorrekt?
 
Emu-Emsen hat gesagt.:
Hallo,

ich möchte eine URL mittels regulärem Audruck auf Korrektheit prüfen.

http:// muss immer vorhanden sein, www kann vorhanden sein. So siehts aus:

Code:
$regexp_homepage = "/^http://(www.)?[a-zA-Z0-9-]{3,64}.[a-zA-Z]{2,4}$/";

if (!eregi($regexp_homepage, $homepage)) {
    echo "Fehler: Die angegebene Homepage ist nicht korrekt!";
}
Leider wird immer die Fehlermeldung ausgegeben.

Was ist an dem regulären Ausdruck nicht Kkorrekt?

PHP:
<?php

$URL = "http://www.tutorials.de";
$pattern = "/^http:\/\/(www\.)?([a-zA-Z0-9]{3,65})(\.[a-zA-Z]{2,4})$/";

if(preg_match($pattern,$URL,$matches)){
  print_r($matches);
}else{
  echo "nichts gefunden";
}

Ich hoffe das funktioniert so

der " . " steht dafür immer für ein beliebiges Zeichen also keinen " . " unbedingt , mit \. sucht er einen Punkt. Des weiteren Sonderzeichen die enthalten sein sollen immer escapen dann wie bei http:\/\/ oder sucht man eine Klammer \( \) etc.

Bei mir klappt das soweit zumindest erst einmal nun :)
 
Zuletzt bearbeitet:
HTTP-Adressen können weit aus komplexer sein:
PHP:
<?php

	$pattern = "(?:https?://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?)(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*))*)(?:\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*))?)?)";
	var_dump( preg_match('/^'.addcslashes($pattern, '/').'$/', trim($string)) );

?>

Nachtrag: Ich hab die ehemals eingesetzte preg_quote()-Funktion durch die addcslashes()-Funktion ersetzt.
 
Meine Fresse suchst du damit das Weltall nach ausserirdischen Leben ab ? Das sieht ja nur noch finster aus , welche URL`s würde der Pattern nun finden ?

Also das Beispiel da oben würde klar nur eines finden und das ist die Rohform einer URL also http:// (www.) seite .de/.com./.net etc
 
Mhm kurze Zwischenfrage , dürfte ich mir den mal so kopieren einfach um ihn später mal einzusetzen bei Bedarf ?

Bzw seh ich das ich noch grosse Lücken bei mir mit den regulären Ausdrücken .
 
Vielen Dank euch beiden!

Hab den RegExp von FipsTheThief genommen, der andere von Gumbo ist echt krank, hast du den selbst aufgestellt? Booahh...wie kann man nur auf sowas kommen :-) ich habs gar nicht erst versucht, den zu verstehen....
 
Der Vorschlag von FipsTheThief ist aber äußerst unvollständig: Was ist, wenn eine andere Subdomain als „www“ oder kein Hostnamen sondern nur eine IP-Adresse angegeben wird?
 
Hast recht, auch bei Third Level Domains wie .de.com funktioniert das nicht. Brücksichtigt dein Ausdruck dies alles und auch das, was du angesprochen hattest?
 
Zurück