Задача - найти, начинается ли строка с http: // или https: // или ftp: //
$ regex = "((https? | Ftp): //)?";
, но preg_match ($ regex) работает неправильно.Что я должен изменить?
Вы должны использовать разделитель (/) вокруг RegExp:)
// Protocol's optional $regex = "/^((https?|ftp)\:\/\/)?/"; // protocol's required $regex = "/^(https?|ftp)\:\/\//"; if (preg_match($regex, 'http://www.google.com')) { // ... }
http://br.php.net/manual/en/function.preg-match.php
Нужно ли использовать регулярные выражения? Можно достичь того же, используя строковые функции:
if (strpos($url, 'http://') === 0 || strpos($url, 'https://') === 0 || strpos($url, 'ftp://') === 0) { // do magic }
Как это:
$search_for = array('http', 'https', 'ftp'); $scheme = parse_url($url, PHP_URL_SCHEME); if (in_array($scheme, $search_for)) { // etc. }
Вам нужно: preg_match ('#((https?|ftp)://)?#', $url)
preg_match ('#((https?|ftp)://)?#', $url)
Разделители # устраняют необходимость в экранировании /, что более удобно для URL
#
/