Регулярный шаблон выражения для соответствия URL-адресу с или без http://www
Я не очень хорошо разбираюсь в регулярных выражениях.
Я использую много кода рамки на сегодняшний день, но я не могу найти тот, который может соответствовать URL-адресу, например http://www.example.com/etcetc
, но также способен поймать что-то вроде www.example.com/etcetc
и example.com/etcetc
.
Любая помощь будет отличной. Спасибо, парни!
Ответы
Ответ 1
Для соответствия всем типам URL следующий код должен работать:
<?php
$regex = "((https?|ftp)://)?"; // SCHEME
$regex .= "([a-z0-9+!*(),;?&=$_.-]+(:[a-z0-9+!*(),;?&=$_.-]+)[email protected])?"; // User and Pass
$regex .= "([a-z0-9\-\.]*)\.(([a-z]{2,4})|([0-9]{1,3}\.([0-9]{1,3})\.([0-9]{1,3})))"; // Host or IP
$regex .= "(:[0-9]{2,5})?"; // Port
$regex .= "(/([a-z0-9+$_%-]\.?)+)*/?"; // Path
$regex .= "(\?[a-z+&\$_.-][a-z0-9;:@&%=+/$_.-]*)?"; // GET Query
$regex .= "(#[a-z_.-][a-z0-9+$%_.-]*)?"; // Anchor
?>
Тогда правильный способ проверить регулярное выражение выглядит следующим образом:
<?php
if(preg_match("~^$regex$~i", 'www.example.com/etcetc', $m))
var_dump($m);
if(preg_match("~^$regex$~i", 'http://www.example.com/etcetc', $m))
var_dump($m);
?>
Courtesy:
Комментарии, сделанные splattermania в руководстве PHP: http://php.net/manual/en/function.preg-match.php
RegEx Demo в regex101
Ответ 2
Это работает для меня во всех случаях, которые я тестировал:
$url_pattern = '/((http|https)\:\/\/)?[a-zA-Z0-9\.\/\?\:@\-_=#]+\.([a-zA-Z0-9\&\.\/\?\:@\-_=#])*/';
Тесты:
http://test.test-75.1474.stackoverflow.com/
https://www.stackoverflow.com
https://www.stackoverflow.com/
http://wwww.stackoverflow.com/
http://wwww.stackoverflow.com
http://test.test-75.1474.stackoverflow.com/
http://www.stackoverflow.com
http://www.stackoverflow.com/
stackoverflow.com/
stackoverflow.com
http://www.example.com/etcetc
www.example.com/etcetc
example.com/etcetc
user:[email protected]/etcetc
example.com/etcetc?query=aasd
example.com/etcetc?query=aasd&dest=asds
http://stackoverflow.com/questions/6427530/regular-expression-pattern-to-match-url-with-or-without-http-www
http://stackoverflow.com/questions/6427530/regular-expression-pattern-to-match-url-with-or-without-http-www/
Каждый допустимый URL-адрес Интернета имеет по крайней мере одну точку, поэтому вышеприведенный шаблон попробует найти хотя бы две строки, привязанные точкой, и имеет допустимые символы, которые могут иметь URL.
Ответ 3
Попробуйте следующее:
/^http:\/\/|(www\.)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/
Он работает точно так, как хотят люди.
Требуется с или без http://
, https://
и www
.
Ответ 4
Вы можете использовать знак вопроса после регулярного выражения, чтобы сделать его условным, чтобы вы хотели использовать:
http:\/\/(www\.)?
Это будет соответствовать любому, что есть http://www. или http://(без www.)
Что вы можете сделать, просто используйте метод replace, чтобы удалить вышеуказанное, тем самым получив домен. Зависит от того, для чего нужен домен.
Ответ 5
Я знаю, что это старый пост, но только способствующий моему решению, которое представляет собой комбинацию некоторых ответов, которые я нашел здесь, в stackoverflow.
/(https?://)?((?:(\w+-)*\w+)\.)+(?:[a-z]{2})(\/?\w?-?=?_?\??&?)+[\.]?([a-z0-9\?=&_\-%#])?/g
Соответствует something.com
, http(s)://
или www
. Не соответствует другим URL-адресам [something]://
, хотя, но для моей цели это не нужно.
Регулярное выражение совпадает, например:
http://foo.co.uk/
www.regex.com/foo.html?q=bar$some=thi-ng,regex
regex.foo.com/blog
Ответ 6
Попробуйте что-то вроде этого:
.*([\w-]+\.)+[a-z]{2,5}(/[\w-]+)*
Ответ 7
Попробуйте это
$url_reg = /(ftp|https?):\/\/(\w+:?\w*@)?(\S+)(:[0-9]+)?(\/([\w#!:.?+=&%@!\/-])?)?/;
Ответ 8
Если это не должно быть регулярное выражение, вы всегда можете использовать фильтры Validate, которые находятся в PHP.
filter_var('http://example.com', FILTER_VALIDATE_URL);
filter_var (mixed $variable [, int $filter = FILTER_DEFAULT [, mixed $options]]);
Типы фильтров
Проверить фильтры