Такими примерами являются hostnames .Сами по себе они не являются действительными URL.
Имена хостов состоят из .
разделенных «меток».Каждая метка должна содержать до 63 символов букв, цифр и дефисов, но дефис не должен быть первым или последним символом.Необязательно следовать за целым именем хоста с помощью другой точки.
Вы можете сопоставить это с шаблоном (например, без учета регистра):
([a-z0-9]|[a-z0-9][a-z0-9\-]{0,61}[a-z0-9])(\.[a-z0-9]|[a-z0-9][a-z0-9\-]{0,61}[a-z0-9])*\.?
Однако это соответствует строкам, таким как 1.2.3.4
также, которые, хотя технически они могут быть именами хостов / доменов, фактически будут действовать как прямые IP-адреса.Вы можете разрешить это.Если вы это сделаете, вы также можете разрешить адреса IPv6, которые разделены двоеточием шестнадцатеричной;когда они встроены в URL, они также заключены в квадратные скобки.
И, конечно, есть IDNA.В настоящее время 例え.テスト
является действительным доменным именем IDNA, соответствующим xn--r8jz45g.xn--zckzah
.Если вы хотите разрешить их, вам понадобится поддержка Unicode.
Резюме: это немного сложнее, чем вы думаете.И это только имена хостов.«Проверка» целого URL - еще большая работа.Простое регулярное выражение не собирается взломать его.Используйте уже существующую библиотеку.