Универсальная проверка URL.

Статус
В этой теме нельзя размещать новые ответы.

Maza

Постоялец
Регистрация
2 Июл 2007
Сообщения
255
Реакции
120
Вобщем нужна помощь в до писании универсального патерна для проверки URL.
Задача следующая:
Нужно чтоб проходили все url имеющие след вид.
Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся
/yandex.ru

Регулярка с этим справляется, но вот как дополнить чтоб не было такого:
Для просмотра ссылки Войди или Зарегистрируйся

Чёт не приходит в голову пока ничего.
PHP:
<?php
$string = "/www.yandex.ru/resume?sd=587&sd/user-st/";
preg_match_all("#(?:http://)?/?([_a-zA-Z\d\-]+(?:\.[_a-zA-Z\d\-]+)+/?(?:[_a-zA-Z\d\-]+)?/?(?:[_a-zA-Z\d\Q-[]?.=%&;\E\\#]+)?/?)#",$string, $matches);
print_r($matches);
?>
 
Можно использовать опережающую проверку для отсекания недопустимых последовательностей:
, где XXX - последовательность, при которой preg_match должен сфейлить, а ZZZ - регулярное выражение для матча нормальных урлов. Например:
Знак вопроса экранирован, т.е. "плохая" последовательность: ?#/
Полный вариант:
PHP:
if (preg_match('~^(?!.*\?#/)(?:http://)?/?([_a-zA-Z\d\-]+(?:\.[_a-zA-Z\d\-]+)+/?(?:[_a-zA-Z\d\-]+)?/?(?:[_a-zA-Z\d\Q-[]?.=%&;\E\\\\#]+)?/?)~im', $subject)) {
	// OK
}
 
  • Нравится
Реакции: Maza
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху