Соответствие регулярному выражению - PullRequest
1 голос
/ 19 января 2012

Мои навыки регулярных выражений плохие.Чтобы мои js / css отображали правильное меню, я добавляю в "li" класс к своему li, чтобы js знал, какой элемент является текущим (чтобы он мог отображать остальную часть раскрывающегося списка).

Моя проблема связана с правильной строкой URI в codeigniter:

<li <? if((strstr($this->uri->uri_string(),"rfid_finder/finder")) || (strstr($this->uri->uri_string(),"finder"))) {?>class="selected"<?}?>  rel="home"> <?= anchor('finder','HOME')?></li>

Я изначально использовал этот метод, но мои маршруты теперь немного сложнее, чтобы разрешить поиск и нумерацию страниц.

Iтребуется регулярное выражение, которое будет соответствовать всем следующим маршрутам:

$route['finder/(:any)/(:any)/(:num)'] = "rfid_finder/finder/$1/$2/$3";
$route['finder/(:any)/(:any)'] = "rfid_finder/finder/$1/$2";
$route['finder/(:any)'] = "rfid_finder/finder/$1";
$route['finder'] = 'rfid_finder/finder';

, но когда пользователь посещает:

rfid_finder/search_form

первое меню не соответствует выбранному классу.

Обновление

Я хочу, чтобы первый фрагмент кода соответствовал маршрутам, а не маршруту rfid_finder/search - у меня есть вторая строка кода, которая соответствует маршруту rfid_finder / search_form.моя проблема заключается в попытке записать маршрут, используя (strstr($this->uri->uri_string(),"finder"), он соответствует всем моим маршрутам, даже rfid_finder/search_form

1 Ответ

0 голосов
/ 19 января 2012

Хм, дай мне знать, если это работает для тебя.Похоже, что он работает в моих тестах.

preg_match('|^(rfid_finder/)?finder/?([a-z0-9]+?)?(/[a-z0-9]+?)?(/\d+?)?$|i', $string)

Вот мой пример тестирования:

$route = array();
$route['finder/(:any)/(:any)/(:num)'] = "rfid_finder/finder/$1/$2/$3";
$route['finder/(:any)/(:any)'] = "rfid_finder/finder/$1/$2";
$route['finder/(:any)'] = "rfid_finder/finder/$1";
$route['finder'] = 'rfid_finder/finder';


$route['finder/2313'] = 'rfid_finder/finder';
$route['finder/asd/dsda'] = 'rfid_finder/finder';
$route['rfid_finder/finder/dd/122'] = 'rfid_finder/finder';
$route['rfid_finder/finder/dd/122/qwewe'] = 'rfid_finder/finder';
$route['rfid_finder/finder/dd/asdsad/333'] = 'rfid_finder/finder';

foreach ($route as $string=>$match) {
    if ( preg_match('|^(rfid_finder/)?finder/?([a-z0-9]+?)?(/[a-z0-9]+?)?(/\d+?)?$|i', $string) ) {
        echo $string.' - yes';
    } else {
        echo $string.' - no';
    }
    echo '<br />';
}

exit();

Он ищет строку, чтобы убедиться, что она начинается с finder или rfid_finder (я не былдействительно уверен, что вы предпочитаете. если вы хотите, чтобы он начинался только с rfid_finder, просто удалите скобки вокруг rfid_finder и завершающий? перед искателем)

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