В качестве отправной точки вы можете использовать эту для JS , но ее легко преобразовать в PHP preg_match
.
/^(https?\://)?(www\.)?([a-z0-9]([a-z0-9]|(\-[a-z0-9]))*\.)+[a-z]+$/i
Для PHP должно работать это:
$reg = '@^(https?\://)?(www\.)?([a-z0-9]([a-z0-9]|(\-[a-z0-9]))*\.)+[a-z]+$@i';
Это регулярное выражение в любом случае проверяет только часть домена , но вы можете поработать над этим или разбить URL на 1-й слеш '/'
(после "://"
) и проверьте отдельно доменную часть и остальные.
Кстати: это также подтвердит "http://www.domain.com.com"
, но это не ошибка, потому что URL субдомена может выглядеть так: "http://www.subdomain.domain.com"
и этонедействителен!И почти нет способа (или, по крайней мере, нет простого способа) проверить правильность tld домена с помощью регулярного выражения , потому что вам нужно было бы встроить в свой regex все возможные tlds домена ONE BY ONE, как это:
/^(https?\://)?(www\.)?([a-z0-9]([a-z0-9]|(\-[a-z0-9]))*\.)+(com|it|net|uk|de)$/i
(последний пример, например, будет проверять только домен, заканчивающийся на .com / .net / .de / .it / .co.uk). Новые tlds всегда выходят , так что вам придется корректировать каждое регулярное выражение, выходит новый tld, это боль в шее!