Регулярное выражение для фиксированной строки - PullRequest
2 голосов
/ 13 октября 2010

У меня есть следующая строка.

?page=1&sort=desc&param=5&parm2=25

Мне нужно проверить, находится ли URL-адрес строки ввода в строгом формате, кроме значения переменной Например, page =, sort =, param =, param2.

Пожалуйста, предложите регулярное выражение. Спасибо

Ответы [ 5 ]

10 голосов
/ 13 октября 2010

Вы должны использовать parse_str и проверить, установлены ли все необходимые параметры с помощью isset.Regex - это не тот путь, по которому можно идти.

1 голос
/ 13 октября 2010

Может быть это:

\?page=\d+&sort=.+&param=\d+&param2=\d+

, что означает:

? Page = followed by any digit repeated 1 or more times

& sort = followed by any character repeated 1 or more times

мкм = followed by any digit repeated 1 or more times

¶m2 = followed by any digit repeated 1 or more times

Я думаю, что Алин ПуркаруСовет лучше

РЕДАКТИРОВАТЬ:

(\?|&)(page=[^&]+|sort=[^&]+|param=[^&]+|parm2=[^&]+)

Таким образом, заказ не имеет значения

0 голосов
/ 13 октября 2010

Регулярное выражение будет ^\?([\w\d]+=[\w\d]+(|&))*$ Пока ваши значения являются буквенно-цифровыми, но, возможно, вы захотите взглянуть на фильтры, если хотите подтвердить URL http://www.php.net/manual/en/book.filter.php

0 голосов
/ 13 октября 2010

Вы можете использовать следующий regx / \? Page = [^ &] * sort = [^ &] * param = [^ &] * param2 = / `для соответствия:

if (preg_match("/\?page=([^&]*)sort=([^&]*)param=([^&]*)param2=([^&]*)/i", $inputstr, $matches))
{
   echo "Matches:";
   print_r($matches);     // matches will contain the params

}
else
   echo "Params nor found, or in wrong order;
0 голосов
/ 13 октября 2010

Если вас волнует порядок параметров, примерно так:

\?page=[^&]+&sort=[^&]+param=[^&]+param2=[^&]+$

Но Алин Пуркару прав - используйте уже написанную для этого функцию parse_str

...