EisFuX: Regex, URL Check ...

Beitrag lesen

Hallöchen Chrisi,

ich habe mir eine Regex gebaut die eine URL mit PHP & preg_match() auf Gültigkeit prüfen soll:

/^(http|https)://(([A-Z0-9][A-Z0-9_-ÄÜÖ]*)(.[A-Z0-9ÄÜÖ][A-Z0-9_-ÄÜÖ]*)+)(:(\d+))?//i

Klappt auch ganz gut, aber :-)

http://www.test.de?test=123

Weil der abschließende Slash nach der TLD fehlt?

Ansonsten fällt mir da dieses schöne Beispiel ein:

http://aktuell.de.selfhtml.org/tippstricks/programmiertechnik/email/index.htm

Hier wird zwar die Syntax einer kompletten E-Mail-Adresse geprüft, aber der Host-Name ist ja ein Bestandteil davon.
Um den Rest (den Query-String) noch richtig zu matchen, kannst du dir ja mal zusätzlich die URL-RFC reinziehen. Dort steht ausführlich, welche Zeichen erlaubt sind und welche nicht.

Und dann wäre da noch ein etwas älteres Stück PHP-Code, dass ich mal vor langer Zeit gebastelt hatte. Es zerlegt eine URL mit PCRE in ihre Bestandteile. Es überprüft nicht auf sämtliche zulässigen Zeichen, sondern "matcht" nur auf die "Anker-Zeichen", die in einer URL die einzelnen Bestandteile trennen. Möglicherweise kannst du dir da was abkucken. Was allerdings fehlt, ist die Erkennung von Username und Passwort:

  
function split_url(  
  $url = EMPTY_STRING  
) {  
  if($url == EMPTY_STRING) return(FALSE);  
  
  $prot  = '(([a-z]+):\/\/)?' ; // protocol  
  $host  = '([^\/:]+)'        ; // server/host  
  $port  = '(:(\d{1,5}))?'    ; // port  
  $ruri  = '(\/[^#]*)?'       ; // request uri  
  $ploc  = '(#(.*))?'         ; // location in web page  
  
  $rx_matches = array();  
  if( !preg_match(  
    '/\A'.$prot.$host.$port.$ruri.$ploc.'\Z/',  
    $url,  
    $rx_matches  
  ) ) return(FALSE);  
  
  // decoded url  
  $du = array(  
    'prot' => $rx_matches[2],  
    'host' => $rx_matches[3],  
    'port' => $rx_matches[5],  
    'ruri' => $rx_matches[6],  
    'ploc' => $rx_matches[8],  
  );  
  
  return($du);  
}

MffG
EisFuX

--
Auch meine Hosenträger sind intelligent, in dem Sinne, dass man sie regulieren kann. Sie besitzen ein adaptives Verhalten.
Stanisław Lem