Thema: URL-Syntax überprüfen

Hallo,

nachdem ich jetzt auch gesehen habe, daß es hier sogar ein extra Forum für reguläre Ausdrücke gibt, frage ich mal hier nach.
Ich hab die folgende Zeile, die eine URL auf ihre Syntax überprüft. Da das ja eigentlich viermal das gleich ist, wollte ich fragen ob das irgendwie auch kürzer geht.

 $passt = ereg("([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})", getenv('HTTP_REFERER'));
 

Danke!

Gruß, Heppi.

2

Re: URL-Syntax überprüfen

wenn Du nur auf Zahlen prüfen willst, kannst Du auch anstatt

 [0-9]
 d
 

benutzen.
Siehe hierzu auch:
http://de.php.net/manual/en/pcre.pattern.syntax.php

Außerdem kannst Du dem "ersten" Treffer ja auch eine Anzahl mitgeben:

 /(d{1,3}.?){4}/
 

Dieser Ausdruck liest sich in etwa so:
1 bis 3 Ziffern, optional ein Punkt hinterher, und das Ganze bitte 4mal <img src="/forum/images/graemlins/smile.gif" alt="" />

HTH, tink

[edit]
Pass bitte auf Deine Formulierung auf, wovon Du da sprichst, ist eine IP-Adresse, keine URL.
Eine URL wäre
http://www.devshare.de
die IP-Adresse von devshare ist:
212.227.231.24
Diese Dinger zu parsen sind 2 unterschiedliche Ziele.
[/edit]

Beleidigungen sind die Argumente derer, die keine Argumente haben

3

Re: URL-Syntax überprüfen

Moinmoin,

Wenn der Punkt optional ist:

 /(d{1,3}.?){4}/
 

wie im Vorschlag von tink, wird auch ein matching
auf zB. '1234--55ö66' zugelassen.

Soll aber ein string gefunden werden, der aus
4 Gruppen, bestehend aus jeweils einer bis drei Ziffern,
gefolgt von einem Punkt (bzw. dem Stringende im Fall
der letzen Gruppe) gefunden werden, kann man sagen:

 '/^(?:d{1,3}.){3}d{1,3}$/'
 

Hier nochmal der Unterschied:

 <?
 echo '<pre>';
 
 $p = '/(d{1,3}.?){4}/';
 $ip  = '1234--55ö66';
 
 $pp = '/^(?:d{1,3}.){3}d{1,3}$/';
 $ipp = '12.456.7.890';
 
 preg_match($p, $ip, $mip);
 echo $mip[0];
 
 echo "n";
 
 preg_match($pp, $ipp, $mipp);
 echo $mipp[0];
 
 echo '</pre>';
 ?>
 

gruß

matho

4

Re: URL-Syntax überprüfen

@ matho:
Wenn Du meinen Ausdruck auch noch mit den Begrenzungszeichen versiehst, wird Dein Gegenbeispiel auch nimmer gefunden <img src="/forum/images/graemlins/smile.gif" alt="" />

 /^(d{1,3}.?){4}$/
 

Das Einzige was dann noch schiefgehen kann, ist ein abschließender . also zum Beispiel:
123.45.6.789.

tink

Beleidigungen sind die Argumente derer, die keine Argumente haben

5

Re: URL-Syntax überprüfen

@ tink

es soll aber _nichts_ schiefgehn.

Wenn Du schon die Formulierung mit dem optionalen Punkt haben
möchtest, dann kannst Du sagen:

 '/^(?:d{1,3}(?:.(?!$)|$)){4}/'
 

aber das ist vielleicht mit Kanonen auf Spatzen geschossen.

und nochen gruß

matho

6

Re: URL-Syntax überprüfen

@ matho:
Ja, ich weiß, Dein Ausdruck mit den 3-Elementen und dem letzten Element ist ja eigentlich auch schon völlig okay! <img src="/forum/images/graemlins/smile.gif" alt="" />

Und lass die Spatzen leben <img src="/forum/images/graemlins/wink.gif" alt="" />

tink

Beleidigungen sind die Argumente derer, die keine Argumente haben

7

Re: URL-Syntax überprüfen

Für den letzten Feinschliff noch'n Link zur FAQ der PHP-NGs: 

8.2. Soll ich ereg() oder preg() verwenden?
http://www.dclp-faq.de/q/q-regexp-ereg.html

Basti