Пример:
http://mysite.domain/user1 //profile user 1
http://mysite.domain/user1/photos //photos user 1
http://mysite.domain/user1/friends //friends user 1
Действие только пользователя фотографии или друзей. Это мой код:
if (preg_match('/^\/([\w\-]+)(\/[photos|friends]+)$/i', $url, $m)) {
//code...
}
Но не работает, кто-нибудь может мне помочь?
Одна ошибка [photos|friends]+
, Это будет соответствовать слишком широко, а именно любой комбинации упомянутых символов, включая |
; не всю строку в том порядке, в котором вы ее поместили (либо 'photos'
или же 'profile
«).
Я думаю, что вы хотите, чтобы выражение '/^\/([\w\-]+)\/(photos|friends)$/i'
— это предполагает $url
является '/user1/photos'
или же '/user1/friends'
,
Я бы предложил при сопоставлении URL-адресов использовать разделитель регулярных выражений, кроме /
потому что необходимость избежать всех слешей делает выражение сложным для понимания. Лично мне нравится использовать запятую (так как это редко встречается в URL): ',^/([\w\-]+)/(photos|friends)$,i'
,
Обновить
Сделать последнюю часть (/photos
или же /friends
) необязательно, используйте ',^/([\w\-]+)(/(photos|friends))?$,i'
, Если вы хотите разрешить /user1/
(с косой чертой), вы можете сделать это еще проще ',^/([\w\-]+)/(photos|friends)?$,i'
,
?
сделает предыдущий токен необязательным (в первом случае это (/(photos|friends))
во втором случае это просто (photos|friends)
,
Других решений пока нет …