2013-05-13 4 views
2

У меня есть блог, я хочу отображать ADS или специальный текст на главной странице, но не на любой другой странице с URI /?paged=[number]. Я пробовал стандартное регулярное выражение /^[0-9].$/, но он не соответствует.Номера регулярных выражений PHP в url

Я не уверен, что я сделал не так или, как идти об этом

if (substr_count($_SERVER[REQUEST_URI], "/") > 0 AND 
substr_count($_SERVER[REQUEST_URI], "/?paged=1") == 0 AND 
substr_count($_SERVER[REQUEST_URI], "/?paged=2") == 0 AND 
substr_count($_SERVER[REQUEST_URI], "/?paged=3") == 0 AND 
substr_count($_SERVER[REQUEST_URI], "/?paged=4") == 0 AND 
substr_count($_SERVER[REQUEST_URI], "/?paged=5") == 0) { 
echo "display special text, banners, and other stuff"; 
} 

Это, как я это делаю в данный момент, но я не хочу, чтобы сделать тысячи из них ...

+7

Почему не только 'если (! Исеть ($ _ GET [ 'выгружаемого']))'? – Rikesh

+1

Когда я вижу такой код, мне напомнили, почему я не пропустил http://thedailywtf.com/ больше, так как я стал более активным на SO. –

+1

Если вы посмотрите на свое логическое сравнение ** У НИЧЕГО НЕСКОЛЬКО ЧУВСТВА **. Вы проверяете, есть ли у вашего URI '' /? Paged = 1 "," /? Paged = 2 "," /? Paged = 3 "," /? Paged = 4 "," /? Paged = 5 "' на в то же время, и это будет ** НИКОГДА ** не совпадать, obviusly. Вы должны добавить 'OR' вместо' AND' – DaGLiMiOuX

ответ

7

Можете ли вы не просто проверить наличие paged в массиве GET?

if(!isset($_GET['paged'])) { 
    // You know this is the main page. 
} 
+0

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

+0

@WolfmanJoe Согласен. Часто лучше переносить такие значения в некоторую постоянную структуру, поэтому ваш код максимально гибкий. – christopher

0

Попробуйте это:

if (preg_match('#paged=\d+#', $_SERVER[REQUEST_URI]) { 
    echo "display special text, banners, and other stuff"; 
} 
0

Regex: /^[0-9].$/ будет правильным для строки "3k". Проанализируйте эти шаблоны

/page=(\d+)/ 
/page=([1-5])/ 
/^\/\?page=([1-5])$/ 
/page=(?<page>[1-5])/ 
0

Почему бы не использовать регулярное выражение в параметре GET?

<?php 
$regexp = "/^(\d+)+$"; 
if (preg_match($regexp, $_GET['paged'])) { 
    #...your code 
} else { 
    #...your code 
} 

Или (если вы хотите использовать всю строку), попробуйте следующее:

<?php 
$regexp = "/^(\/\?paged)+=(\d+)+$/"; 
+1

Первый шаг, когда вы получаете вход снаружи: ** проверьте **, если он существует !!! – HamZa

Смежные вопросы