2016-04-26 1 views
0

In PHP versuche ich den Pfad einer URL mit Regex zu validieren. Die aktuelle Regex, die ich getestet habe, ist diese: ^(\/\w+)+\.\w+(\?(\w+=[\w\d]+(&\w+=[\w\d]+)+)+)*$Überprüfen Sie den Pfad einer URL in PHP

public function isValidPath($urlPath) 
{ 
    if (!preg_match("#^(\/\w+)+\.\w+(\?(\w+=[\w\d]+(&\w+=[\w\d]+)+)+)*$#i", $urlPath)) { return false; } 
    else { return true; }   
} 

$arrUrl = parse_url($url); 
$urlPath = $arrUrl['path']; 
// valid path ? 
if(isValidPath($urlPath)) { echo "OK"; } 
else { echo "Invalid Path URL"; } 

Aber es funktioniert nicht mit Pfad, der nur mit / starten.

Ich bin kein Regex-Experte und breche mir den Kopf, wenn ich versuche, einen zu tun, der sehr einfach zu sein scheint.

+0

suchen Sie, ob eine Datei/Seite tatsächlich auf der URL vorhanden ist? – cmorrissey

+2

'filter_var ('http://nothing.com'. $ UrlPath, FILTER_VALIDATE_URL)' validiert die URL – cmorrissey

+0

@cmorrissey 'FILTER_VALIDATE_URL' funktioniert nicht mit diesem Beispiel' http://somesite.com/asd/asd. jsp & bar = baz? inga = 42? quux' - https://ideone.com/BRHXpU –

Antwort

0

Hier gehen Sie:

^\/(?!.*\/$)(?!.*[\/]{2,})(?!.*\?.*\?)(?!.*\.\/).* 

Beispielfunktion:

function validateUrl($url){ 
if (preg_match('%^/(?!.*\/$)(?!.*[\/]{2,})(?!.*\?.*\?)(?!.*\.\/).*%im', $url)) { 
    return true; 
} else { 
    return false; 
} 
} 

Ich habe einige negativ look-ahead verwendet, die bestimmte Muster ausschließen. Es stimmt nur mit den von Ihnen angegebenen "gültigen Pfaden" überein.

Regex101Demo

+0

Pedro, danke für deine Hilfe. Aber ich möchte alle Pfad validieren, nicht nur Beispiel "gültige Pfade" Ich bin angegeben. Für ex. mit dir regex diesen Pfad '/ '+ $ (abc.abcd [zz] .wxyz) .azerty (' ist OK. Aber ist nicht. – LeMoussel

+0

Ich verstehe Ihren Punkt, können Sie versuchen, die Regex mit ein paar mehr zu verlängern -Achsen. –

0

Ich benutze @ cmorrissey Ansatz, der eigentlich nicht regex erfordert:

$result = filter_var('http://www.example.com' . $path, FILTER_VALIDATE_URL); 

if ($result !== false) { 
    $result = true; 
} 

result ist dann true oder false je nach Weg Gültigkeit. Beachten Sie, dass Pfade immer mit einer / beginnen sollten, andernfalls sind sie Teil eines Pfades und nicht ein vollständiger Pfad.