Парсинг действительного URL в php - PullRequest
0 голосов
/ 04 августа 2011

У меня есть это регулярное выражение для фильтрации URL-адресов, но оно также отфильтровывает некоторые недействительные URL-адреса

    $regexUrl = "((https?|ftp)\:\/\/)?"; // SCHEME 
    $regexUrl .= "([a-zA-Z0-9+!*(),;?&=\$_.-]+(\:[a-zA-Z0-9+!*(),;?&=\$_.-]+)?@)?"; // User and Pass 
    $regexUrl .= "([a-zA-Z0-9-.]*)\.([a-zA-Z]{2,3})"; // Host or IP 
    $regexUrl .= "(\:[0-9]{2,5})?"; // Port 
    $regexUrl .= "(\/([a-zA-Z0-9+\$_-]\.?)+)*\/?"; // Path 
    $regexUrl .= "(\?[a-zA-Z+&\$_.-][a-zA-Z0-9;:@&%=+\/\$_.-]*)?"; // GET Query 
    $regexUrl .= "(#[a-zA-Z_.-][a-zA-Z0-9+\$_.-]*)?"; // Anchor

например, "http: //...XYZ" также фильтруется приведенным выше регулярным выражением, но это неверный URL.

Любая помощь будет оценена

Ответы [ 2 ]

3 голосов
/ 04 августа 2011
$valid = parse_url($url);

это то, что вы ищете?

0 голосов
/ 04 августа 2011

В строке Host или IP измените * на + и удалите . из первого []

$regexUrl .= "([a-zA-Z0-9-]+)\.([a-zA-Z]{2,3})"; // Host or IP 

В результате этого требуется (с +) некоторые символы из первых [] и не разрешать . среди них, поскольку . обрабатывается (и требуется) \., который следует за первая группа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...