проверьте, является ли строка URL-адресом

Я видел много вопросов, но не мог понять, как это работает, поскольку я хочу более простой случай.

Если у нас есть текст, что бы это ни было, я бы хотел проверить, является ли он URL-адресом или нет.

$text = "something.com"; //this is a url if (!IsUrl($text)){ echo "No it is not url"; exit; // die well }else{ echo "Yes it is url"; // my else codes goes } function IsUrl($url){ // ??? } 

Есть ли другой способ, а не проверка с помощью JavaScript в случае блокировки JS?

http://www.php.net/manual/en/function.preg-match.php#93824

 <?php $regex = "((https?|ftp)\:\/\/)?"; // SCHEME $regex .= "([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?"; // User and Pass $regex .= "([a-z0-9-.]*)\.([az]{2,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 if(preg_match("/^$regex$/i", $url)) // `i` flag for case-insensitive { return true; } ?> 

но ваш примерный URL-адрес упрощен, (\w+)\.(\w+) соответствует ему. кто-то еще упомянул filter_var который является просто filter_var($url, FILTER_VALIDATE_URL) но , похоже, он не похож на символы, отличные от ascii, поэтому будьте осторожны …

Функция filter_var PHP – это то, что вам нужно. Найдите FILTER_VALIDATE_URL . Вы также можете установить flags для точной настройки вашей реализации.
Нет необходимости в регулярном выражении ….

Следующий код работал для меня:

 if(filter_var($text, FILTER_VALIDATE_URL)) { echo "Yes it is url"; exit; // die well } else { echo "No it is not url"; // my else codes goes } 

Вы также можете указать соответствие RFC и другие требования к URL-адресу с использованием флагов. См. PHP Validate Filters для получения более подробной информации.

Проверьте, является ли он действительным URL (example.com НЕ является допустимым URL)

  function isValidURL($url) { return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)* (:[0-9]+)?(/.*)?$|i', $url); } 

Как использовать функцию:

  if(!isValidURL($fldbanner_url)) { $errMsg .= "* Please enter valid URL including http://<br>"; } 

Источник: http://phpcentral.com/208-url-validation-in-php.html

Regexes – плохой способ проверить что-то сложное, как URL.

Функция filter_var () PHP предлагает гораздо более надежный способ проверки URL-адресов. Кроме того, это быстрее, так как это собственный код.

Я не думаю, что на это есть окончательный ответ. Пример действительного URL:

 localhost http://xxx.xxx.xxx/alkjnsdf abs.com 

Если у вас есть текст. и не большая его часть. Вы можете проверить, выполнив запрос CURL и посмотрите, возвращает ли он действительный ответ. В противном случае, если я ставлю localhost, это может быть ссылка, и это может быть что-то еще, и вы не сможете проверить это.

Попробуй это:

 function isValidUrl($url) { return preg_match("(?i)\b((?:[az][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][az]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”'']))", $url) > 0; } 

( Источник регулярных выражений )

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

 $pattern = "\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))"; 

Что-то вроде может сработать для вас:

 $arr = array('abc.com/foo', 'localhost', 'abc+def', 'how r u', 'https://how r u', 'ftp://abc.com', 'a.b'); foreach ($arr as $u) { $url = $u; if (!preg_match('#^(?:https?|ftp)://#', $url, $m)) $url = 'http://' . $url; echo "$u => "; var_dump(filter_var($url, FILTER_VALIDATE_URL)); } 

ВЫВОД:

 abc.com/foo => string(18) "http://abc.com/foo" localhost => string(16) "http://localhost" abc+def => string(14) "http://abc+def" how ru => bool(false) https://how ru => bool(false) ftp://abc.com => string(13) "ftp://abc.com" ab => string(10) "http://ab" 

Таким образом, в основном везде, где вы видите false как возвращаемое значение, которое является URL-адресом INVALID для вас.