2010-08-17 3 views
0

я использовал сильфона код для поиска и найти, если НТТР включает в $ URL-адрес пользователь вводитпростой вопрос о preg_match() в PHP

if (!preg_match("/http:///", $user_website) 

, но я получил эту ошибку

Warning: preg_match() [function.preg-match]: Unknown modifier '/' in 

я знаю его из-за http http, но как это работает?

+0

Что такое preg_match ерунда? есть встроенная функция в php только для этого: http://php.net/manual/en/function.parse-url.php – shylent

+1

спасибо за ваше примечание, но мне просто интересно, как обойти эту ошибку –

ответ

2

Вместо того, чтобы бежать каждый / в URL регулярные выражения часто бывает полезно использовать preg_* альтернативные символы, чтобы отметить начало/конец шаблона.

if (!preg_match("#http://#", $user_website) 
0

Вам нужно избегать буквенных символов. Поместите обратную косую черту перед вашими косыми чертами.

http:// становится http:\/\/

0
if (!preg_match("/http:\/\//", $user_website) 
2

Вы можете избежать косой черты, как уже другие ответы, или в качестве альтернативы вы можете использовать различные разделители, предпочтительно символы, которые вы не будете использовать в своем регулярном выражении:

preg_match('~http://~', ...) 
preg_match('!http://!', ...) 

И вы на самом деле не для этого нужно regex. Строка соответствия должно быть достаточно:

if (strpos($user_website, 'http://') !== false) { 
    // do something 
} 

См: strpos()

+1

+1 для упоминания strpos –

+0

было бы +1, если бы не была функция parse_url – shylent

+0

@shy Не похоже, что OP хочет разобрать URL – NullUserException

2

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

if (!preg_match("/http:\/\//", $user_website) 

или вы можете выбрать другой разделитель. Это позволит сохранить шаблон чистый и короткий:

if (!preg_match("#http://#", $user_website) 
2

Конечно, вы должны сделать

$parts = parse_url($my_url); 

$parts['scheme'] будет содержать схему URL (может быть 'HTTP').

+0

+1 для указания правильного инструмента для работы. Не используйте регулярное выражение для синтаксического анализа URL-адреса, если уже есть совершенно хороший встроенный! Кроме того, из-за отсутствующего '^' регулярное выражение OP будет соответствовать примеру https: //.com/a/b/c/http: // x/y/z', который является достаточно допустимым URL (я недавно столкнулся с сайтом, который обслуживал контент с URL-адреса, подобного приведенному выше) –

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