Это хороший способ проверить опубликованный URL?
if (filter_var($_POST['url'], FILTER_VALIDATE_URL)){ echo "valid url"; }else{ echo "invalid url"; }
Это то, что я написал для начала, поскольку я мог показывать с ним несколько сообщений об ошибках:
function validateURL($url) { $pattern = '/^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/'; return preg_match($pattern, $url); } $result = validateURL($_POST['url']); if ($result == "1"){ $scheme = parse_url($_POST['url'], PHP_URL_SCHEME); if (isset($scheme)){ echo $scheme . "://" . parse_url($_POST['url'], PHP_URL_HOST); }else{ echo "error you did not enter http://"; } }else{ echo "your url is not a valid format"; }
Я бы просто пошел за встроенным FILTER_VALIDATE_URL
и использовал общее сообщение об ошибке вроде:
Неверная ссылка. Не забудьте также ввести
http://
.
Если вы хороши, вы можете проверить, есть ли первые 7/8 буквы: http://
или https://
и добавьте их, если нет.
Придумывание и поддержание такого RegEx – это не то, что вам нужно, если проблема уже решена. В сообщении об ошибке также нет необходимости более подробно описывать, если вы не собираетесь объяснять форматы URL-адресов.
Вы проверили это Кайл, http://phpcentral.com/208-url-validation-in-php.html
Я думаю, что просто
filter_var($var, FILTER_VALIDATE_URL)
и проверка протокола strpos () достаточно, потому что пользователь может, если захочет, дать вам неправильный (который не существует) url.
Конечно, вы можете проверить, существует ли домен и вернуть действительный статус http, но я думаю, что это немного завышено.