У меня есть следующее регулярное выражение, которое отлично справляется с сопоставлением URL-адресов:
((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)`
Однако он не обрабатывает URL-адреса без префикса, т.е. stackoverflow.com или www.google.com не совпадают. Кто-нибудь знает, как я могу изменить это регулярное выражение, чтобы не заботиться о том, есть ли префикс или нет?
РЕДАКТИРОВАТЬ: Мой вопрос слишком расплывчатый? Нужно ли больше подробностей?
(((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\)))?[\w\d:#@%/;$()~_?\+-=\\\.&]*)
Я добавил ()? вокруг протоколов, предложенных Винко Врсалович, но теперь регулярное выражение будет соответствовать практически любой строке, если она содержит допустимые символы URL.
Моя реализация этого заключается в том, что у меня есть база данных, которой я управляю содержимым, и у нее есть поле, которое имеет либо обычный текст, номер телефона, URL-адрес или адрес электронной почты. Я искал простой способ проверить ввод, чтобы я мог его правильно отформатировать, т.е. создание тегов привязки для URL-адреса/электронной почты и форматирование номера телефона так, как я отформатировал другие номера на всем сайте. Какие-либо предложения?