Как проверить URL-адрес с большим количеством запросов

У меня есть автоматический сайт, и у меня есть функция SAVE SEARCH, которая сохраняет поиск, который пользователь сделал на сайте для будущего использования. Что я делаю, так это то, что я сохраняю весь URL-адрес в базе данных.

Но мне нужно проверить его как действительный URL. Похоже на это.

http://www.anywebsite.com/cars.php?postcode=CV2+5AS&distance=&make=&min_price=&max_price=&category_type=&body_type=&fuel=&colour=&transmission=&year_of_registration=&mileage=&engine=&doors=&seller=&keywords=&sort=PRICE_LOWEST&referer_url=http%253A%252F%252Flocalhost%252Fselling%252Fcars.php&trader_id=0&case=ADVANCE 

Может ли кто-нибудь предложить мне любую идею о том, как я могу это достичь?

У меня есть preg_match, который есть здесь.

 if (!preg_match('/^https?:(\/\/)?(www\.)?([a-zA-Z0-9_%]*)\b\.[az]{2,4}(\.[az]{2})?/', $fields[$field_name])) 

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

Любая помощь будет высоко оценена.

Не должно быть причин, по которым вам нужно будет вручную обработать URL-адрес, эта проблема была решена.

Взгляните на php filter_var() .

Пример проверки URL: http://www.w3schools.com/php/filter_validate_url.asp

 $url = "http://www.anywebsite.com/cars.php?postcode=CV2+5AS&distance=&make=&min_price=&max_price=&category_type=&body_type=&fuel=&colour=&transmission=&year_of_registration=&mileage=&engine=&doors=&seller=&keywords=&sort=PRICE_LOWEST&referer_url=http%253A%252F%252Flocalhost%252Fselling%252Fcars.php&trader_id=0&case=ADVANCE"; if (!filter_var($url, FILTER_VALIDATE_URL)) { echo "URL is not valid"; } else { echo "URL is valid"; } 

Вы должны использовать filter_vars() с фильтром FILTER_VALIDATE_URL как это предлагается в других ответах. Тем не менее, если вы хотите использовать RegEx, вы должны увидеть В поисках идеального блога регулярных URL-адресов для проверки URL @Mathias Bynens

Я добавлю только один RegEx от @diegoperini, который поддерживает все шаблоны URL.

^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[az\x{00a1}-\x{ffff}0-9]+-?)*[az\x{00a1}-\x{ffff}0-9]+)(?:\.(?:[az\x{00a1}-\x{ffff}0-9]+-?)*[az\x{00a1}-\x{ffff}0-9]+)*(?:\.(?:[az\x{00a1}-\x{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$

зачем изобретать колесо, когда вы можете делать filter_var() ? затем используйте фильтр FILTER_VALIDATE_URL filter_var для PHP 5> = 5.2.0 Также вы можете добавить FILTER_FLAG_HOST_REQUIRED чтобы иметь требуемое доменное имя, которое, по вашему мнению, вам понадобится, и вы можете проверить другие флаги, чтобы узнать, нужны ли они вам.

Пример:

 $url = 'http://www.anywebsite.com/cars.php?postcode=CV2+5AS&distance=&make=&min_price=&max_price=&category_type=&body_type=&fuel=&colour=&transmission=&year_of_registration=&mileage=&engine=&doors=&seller=&keywords=&sort=PRICE_LOWEST&referer_url=http%253A%252F%252Flocalhost%252Fselling%252Fcars.php&trader_id=0&case=ADVANCE'; if(filter_var($url, FILTER_VALIDATE_URL)){ #do stuff here }else{ #invalid } 

Рабочий пример: http://ideone.com/N84VGF

если у вас есть более старая версия PHP, вы можете использовать parse_url() но вам нужно будет добавить регулярное выражение / валидацию, потому что оно не проверяет, действительно ли он действительный / действительный URL.