У меня есть автоматический сайт, и у меня есть функция 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.