Регулярное выражение для проверки URL-адреса веб-сайта

Мне нужно проверить веб-адрес, используя регулярное выражение.

если пользователь вводит url как

  1. www.test.com
  2. http://www.test.com
  3. https://www.test.com

У меня есть регулярное выражение, подобное

/^(http\:\/\/[a-zA-Z0-9_\-]+(?:\.[a-zA-Z0-9_\-]+)*\.[a-zA-Z]{2,4}(?:\/[a-zA-Z0-9_]+)*(?:\/[a-zA-Z0-9_]+\.[a-zA-Z]{2,4}(?:\?[a-zA-Z0-9_]+\=[a-zA-Z0-9_]+)?)?(?:\&[a-zA-Z0-9_]+\=[a-zA-Z0-9_]+)*)$/ 

но это позволит только второй вариант. как я могу изменить регулярное выражение так, чтобы оно принимало и 1-й и 3-й варианты

Solutions Collecting From Web of "Регулярное выражение для проверки URL-адреса веб-сайта"

Это довольно простое выражение для тестирования доменных имен:

 @^(http\:\/\/|https\:\/\/)?([a-z0-9][a-z0-9\-]*\.)+[a-z0-9][a-z0-9\-]*$@i 

Должно соответствовать:

 domain.com www.domain.com http://domain.com https://domain.com 
 (https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9]\.[^\s]{2,}) 

Будет соответствовать следующим случаям:

Не будет соответствовать следующему:

Используйте следующую программу для проверки URL-адреса веб-сайта.

Он будет проверять следующий и любой действительный URL веб-сайта.

  1. http://www.test.com
  2. http://www.test.com
  3. https://www.test.com
<?php $string_url="https://www.test.com"; $reg_exp = "/^(http(s?):\/\/)?(www\.)+[a-zA-Z0-9\.\-\_]+(\.[a-zA-Z]{2,3})+(\/[a-zA-Z0-9\_\-\s\.\/\?\%\#\&\=]*)?$/"; if(preg_match($reg_exp, $string_url) == TRUE){ echo "URL is valid format"; } else{ echo "URL is invalid format"; } ?>
<?php $string_url="https://www.test.com"; $reg_exp = "/^(http(s?):\/\/)?(www\.)+[a-zA-Z0-9\.\-\_]+(\.[a-zA-Z]{2,3})+(\/[a-zA-Z0-9\_\-\s\.\/\?\%\#\&\=]*)?$/"; if(preg_match($reg_exp, $string_url) == TRUE){ echo "URL is valid format"; } else{ echo "URL is invalid format"; } ?> 

Вы можете сделать http:// optional, а также s в https необязательным:

 /^((?:http(?:s)?\:\/\/)?[a-zA-Z0-9_-]+(?:.[a-zA-Z0-9_-]+)*.[a-zA-Z]{2,4}(?:\/[a-zA-Z0-9_]+)*(?:\/[a-zA-Z0-9_]+.[a-zA-Z]{2,4}(?:\?[a-zA-Z0-9_]+\=[a-zA-Z0-9_]+)?)?(?:\&[a-zA-Z0-9_]+\=[a-zA-Z0-9_]+)*)$/ 

Вы также можете использовать этот шаблон:

 (http(s)?://)?([\w-]+\.)+[\w-]+(/[\w- ;,./?%&=]*)? 

Это будет работать для соответствия:

 http://www.google.com https://www.google.com www.google.com google.com google.in 

Простой шаблон для сопоставления.

Надеюсь, это поможет кому-то !!!

Шаблон

(https?:\/\/)?([\w\d]+\.)?[\w\d]+\.\w+\/?.+

Это будет работать для соответствия:

http://www.demo.com

http://foo.co.uk/

Вместо этого попробуйте следующее:

 filter_var($your_variable, FILTER_VALIDATE_URL);