Подтвердить что ты не робот

Регулярный шаблон выражения для соответствия URL-адресу с или без http://www

Я не очень хорошо разбираюсь в регулярных выражениях.

Я использую много кода рамки на сегодняшний день, но я не могу найти тот, который может соответствовать URL-адресу, например http://www.example.com/etcetc, но также способен поймать что-то вроде www.example.com/etcetc и example.com/etcetc.

Любая помощь будет отличной. Спасибо, парни!

4b9b3361

Ответ 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]]);

Типы фильтров

Проверить фильтры