URL Validieren

common

Mitglied
Hallo,

ich bin neu hier und hoffe das mir vielleicht hier gehofen werden kann!
:)

Ich habe ein Problem und bin selsbt leider nicht im stande mein Probelm zu lösen.

Problemstellung:

ich habe ein Formular indem ein User eine URL eingeben kann, diese soll beim absenden geprüft werden, damit meine ich sie soll nicht aufgerufen werden und geprüft werden ob sie existiert, es soll lediglich die Syntax geprüft werden ob dies eine zulässige URL sein könnte oder nicht.

Möglich soll sein,
mit oder ohne HTTP://
mit oder ohne www.
username : passwort
domain
datei
querystring

DOmain und datei soll zwingend angegeben sein alles ander optional.

Ich hoffe das jemand versteht was ich meine :) benötigen würde ich einen Regulären Ausdruck der mit preg_match die eingabe prüft.

Ich habe bereits mit büchern und Online Tutorials herumgetüftelt aber mein wissen reicht nicht aus um das alles in den regex reinzubringen.

Hier mal der bisherig getestete:

Code:
$REGEX = '#^[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$#';

Leider Prüft der nicht alles und das was er checkt auch nicht so wie es eigentlich sein sollte :)

Bin für jeden hinweis sehr dankbar und hoffe das sich überhaupt jemand die mühe macht drüber nachzudenken.

Liebe Grüsse

common
 
Probier mal folgenden regulären Ausdruck:
Code:
(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}))|[;:@&=])*))?)?
 
Vielen Dank Gumbo für deine schnelle Hilfe, leider funktioniert das nicht, kann aber auch an mir liegen.

Hier ein Beispiel zum testen des Ausdrucks:
PHP:
<form name="form1" method="post" action="">
  <input name="url" type="text" size="100">
  <input type="submit" name="Submit" value="Senden">
</form>
<?
$url = $_POST['url'];
$Submit = $_POST['Submit'];
if($Submit == 'Senden'){
	//$regexe = '#^[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$#';
	$regexe = "#(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}))|[;:@&=])*))?)?#";
	if(preg_match($regexe,$url)){echo "ERROR -> ".$url;}else{echo "OK -> ".$url;}
}
?>

Vielleicht liegts ja auch an der Art wie ich den Ausdruck angewand habe.
Hoffe du oder jemand anders hat noch ne Idee!

-common
 
Ein URL ist nun mal ohne Schema („http“, „ftp“, „mailto“, etc.) nun mal kein vollständiger URL. Daher passt der reguläre Ausdruck auch auf fast jede Zeichenkette.
 
Danke Gumbo das du dir nochmal die mühe gemacht hast!

Also auch wenn ich ein Schema angebe bekomme ich ERROR raus.

http://www.test.de

^^ wird als falsch erkannt?

Hab ich dein Posting nicht verstanden?
 
Könntest du mir das bitte nochmal erklären, ich weis nicht was ich falsch mache, zurück bekomme ich doch true?false.

Ich sitze auf der Leitung.
 
Laut deinem Beispiel gehst du jedoch davon aus, dass wenn eine Übereinstimmung gefunden wurde es ein Fehler ist.
 
Das würde aber bedeuten das wenn ich eine falsche Adresse eingebe diese als richtig erkannt werden müsste oder?

Aber genau das passiert nicht es wird egal was eingegeben wird immer falsch erkannt, wenn ich jetzt einfach aus Error <> OK mache dann ist alles immer richtig.
 
Ich erwähnte doch, dass der reguläre Ausdruck mit optionalem Schema einfach zu ungenau/unbestimmt ist.
 
Zurück