Звездочка в эреги - PullRequest
       2

Звездочка в эреги

0 голосов
/ 30 апреля 2010
//URL START
$urlregex = "^(https?|ftp)\:\/\/";
// USER AND PASS
$urlregex .= "([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?";
// HOSTNAME OR IP
$urlregex .= "[a-z0-9+\$_-]+(\.[a-z0-9+\$_-]+)*";
// PORT
$urlregex .= "(\:[0-9]{2,5})?";
// PATH
$urlregex .= "(\/([a-z0-9+\$_-]\.?)+)*\/?";
// GET Query
$urlregex .= "(\?[a-z+&\$_.-][a-z0-9;:@/&%=+\$_.-]*)?";
// ANCHOR
$urlregex .= "(#[a-z_.-][a-z0-9+\$_.-]*)?\$";
// check
if (eregi($urlregex, $url)) {echo "good";} else {echo "bad";}

но что, если у меня есть http://www.example.com/about-me/my-4*-hotel/

Эта проверка eregi недействительна из-за звездочки. Что мне делать?

Ответы [ 3 ]

2 голосов
/ 30 апреля 2010

С документация :

Эта функция УСТАРЕЛА с PHP 5.3.0. Полагаться на эту функцию крайне не рекомендуется.

Используйте взамен filter_var с FILTER_VALIDATE_URL. Или, если вы настаиваете на использовании регулярного выражения, тогда используйте preg_*.

1 голос
/ 01 мая 2010

Я думаю, что ваша проблема в URL, а не в регулярном выражении. В прошлый раз, когда я проверял, звездочка не была разрешена в части URL path . Если вам действительно нужна звездочка, вам следует ее избежать:

http://www.example.com/about-me/my-4%2A-hotel/
0 голосов
/ 30 апреля 2010

Вы можете изменить свое регулярное выражение, чтобы разрешить звезды ...

$urlregex .= "(\/([a-z0-9+\$_*-].?)+)*\/?"; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...