[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Контроллер адреса страниц
Владимир55
В переменной $adr находится адрес страницы, который надо проконтролировать на предмет допустимости вариантов. И если адрес выходит за установленные пределы, то сформировать $flag ="Ошибка";

Каконическое значение адреса такое:
/catalog/members/


Допустимыми также являются значения:
/catalog/members/?page=5
(в конце может быть не только пятерка, а вообще любое число).

Как бы это осуществить?
vital
Регулярным выражением, причем судя по выбору форума вы это и так знаете.
Осталось попробовать его написать. Попытки в студию.

_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."

Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar
Владимир55
Цитата (vital @ 14.06.2014 - 12:03)
Осталось попробовать его написать.

Увы!
Даже не знаю, как приступить!

(Регулярки - это вообще ужас!)
sergeiss
Цитата (Владимир55 @ 14.06.2014 - 15:38)
Как бы это осуществить?

Для начала забудь про регулярки и попробуй сделать без них. Уверяю - есть немало задач, где регулярка - это геморрой на свою же голову.

В данном случае лучше для начала разбить адрес на части посредством explode(). А затем уже анализировать каждую часть. Точнее, если первые 2 части имеют определенное содержание, то анализировать 3-ю часть. Сделать это можно "за 5 минут с перекурами", а с регулярками можно потратить много времени и сил.

vital, забаню нафиг... Не флуди в тематическом разделе (флуд и ругань я удалил)

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
vital
Цитата
за 5 минут с перекурами", а с регулярками можно потратить много времени и сил

Вот тут как раз не сказал бы smile.gif
Регулярка - простое, быстрое и не правильное решение в данном случае.
А много времени и сил - это как раз таки делать explode, сравнивать с базой(массивом) допустимых путей, куда-нить редиректить.. Ну не то что бы много конечно, но явно больше.
ИМХО, конечно.

_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."

Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar
sergeiss
Цитата (vital @ 14.06.2014 - 17:41)
сравнивать с базой(массивом) допустимых путей, куда-нить редиректить..

Интересно, как тут поможет регулярка, по сравнению с explode? smile.gif Если это надо делать, то в любом случае надо будет, в т.ч. и при использовании регулярки.
В данном случае надо оценить, что первый элемент (между слэшами) равен определенной строке, второй элемент равен другой определенной строке, третий элемент либо отсутствует, либо он равен '?page=число'. Покажи регулярку, которой ты это сделаешь? Не так, что "можно сделать", а сделай.
А я покажу (или, еще лучше, Владимир сам сделает), как при использовании explode это делается.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
vital
Цитата
равен определенной строке

Об этом речи не шло.
Автор как раз хотел проверить просто общий вид урла. Это мы с вами понимаем, что проверять надо с конкретным списком, он, вроде бы, не говорил об этом.

_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."

Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar
sergeiss
vital, не отмазывайся smile.gif Покажи, как ты одной регуляркой сделаешь такую проверку. Или не говори, что это легко, или покажи, КАК это сделать.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
vital
Цитата (sergeiss @ 14.06.2014 - 16:15)
vital, не отмазывайся :) Покажи, как ты одной регуляркой сделаешь такую проверку. Или не говори, что это легко, или покажи, КАК это сделать.

Проверку на что? На конкретный грубо говоря контроллер/екшен, а не просто набор букв? Ну не надо меня на слабо брать :)

/catalog/members/?page=5
\/(?:catalog|othercontreoller)\/(?:members|otheraction)\/\?page=\d+


Легко, но не рационально.

И да, _можно_ добавить и то, что бы проверялось еще и конкретное совпадение пар контроллер-екшен, а не только списка. Тоже на слабо будете брать? :)

Но речь не о том можно или нельзя была вроде бы?

_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."

Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar
sergeiss
И будешь регулярку дописывать каждый раз, когда будет добавляться что-то новое?
К тому же, '?page=<число>' может и не быть в адресе...
А если для другого контроллера захочется не page, а другое что-то? Регулярка разрастается и разрастается...
К тому же, этой регуляркой не проверишь, что могут быть только определенные комбинации контроллер/экшен. Предположим, что catalog/members возможны, а subcatalog/members не разрешены. Но твоя регулярка это не проверит, а скажет, что всё ОК...

На самом деле не знаю, какие там задачи у ТС smile.gif Но в данном случае, как я уже говорил, регулярка - это геморрой.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
killer8080
if (rtrim(parse_url($url, PHP_URL_PATH), '/') == '/catalog/members') {
// OK
} else {
// something wrong
}
Владимир55
Цитата (sergeiss @ 14.06.2014 - 14:10)
(или, еще лучше, Владимир сам сделает)

Вот так, вроде бы, тоже можно:
		if (preg_match("/^\/catalog\/members\/(\?page\=([0-9]+))?$/", $adr_str, $res))
if (count($res)==1)
echo "Строка $v верная.<br>\r\n";
else
echo "Строка $v верная. № страницы - $res[2].<br>\r\n";
else
echo "Строка $v неверная.<br>\r\n";
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.