Регулярное выражение для проверки URL-адреса
Мне нужно регулярное выражение, которое проверяло бы следующие формы URL-адреса
http://www.site.com https://www.site.com http://site.com https://site.com http://domain.site.com https://domain.site.com http://www.domain.site.com https://www.domain.site.com site.com domain.site.com http://www.site.com/path/to/dir/ https://www.site.com/path/to/dir/ http://site.com/path/to/dir/ https://site.com/path/to/dir/ http://domain.site.com/path/to/dir/ https://domain.site.com/path/to/dir/ http://www.domain.site.com/path/to/dir/ https://www.domain.domain.site.com/path/to/dir/ site.com/path/to/dir/ domain.site.com/path/to/dir/ http://www.site.com/path/to/file.html https://www.site.com/path/to/file.html http://site.com/path/to/file.html https://site.com/path/to/file.html http://domain.site.com/path/to/file.html https://domain.site.com/path/to/file.html http://www.domain.site.com/path/to/file.html https://www.domain.domain.site.com/path/to/file.html site.com/path/to/file.html domain.site.com/path/to/file.html
И относительные пути
./path/to/file.html ./path/to/dir/ ./path/to/dir path/to/file.html path/to/dir/ path/to/dir
(ftp:// не разрешен)
Расширение файла может быть html, php, gif, jpg, png.
С моим знанием регулярных выражений это заняло бы у меня год (если не больше). Вчера мне потребовалось больше часа, чтобы сделать регулярное выражение для относительного URL, и это оказалось не так, как я хочу! Я чувствую, что должен извиниться за то, что не знаю регулярных выражений! :(
Просто хочу отметить, что это не проблема, если URL-адрес действительно никуда не указывает, моя главная забота-это формат. Мне просто нужно, чтобы формат был в тех (и только в тех), как показывают примеры (это исчерпывающий список). Только это то, что я буду использовать и нуждаться, но если он проверяет другой формат, то это нормально (до тех пор, пока его только http / https... ftp, ftps или что-то еще не разрешено).
Maarten Kools
RegExr[^] имеет библиотеку сообщества, которая также содержит множество выражений проверки URL-адресов, которые должны дать вам быстрый старт. Оттуда вам придется немного подправить выражения, чтобы получить желаемый результат.
EZW
лол, это на самом деле то, что я сейчас делаю и пытаюсь сделать, пока жду предложений (хотя большое спасибо за ваш комментарий). Я либо нарушаю его, либо вообще не получаю никаких новых результатов.
Vedat Ozan Oner
спасибо за ссылку. это здорово :)
Maarten Kools
Всегда пожалуйста, буду рад помочь :)
Vedat Ozan Oner
((http|https)://)?[a-zA-Z]\w*(\.\w+)+(/\w*(\.\w+)*)*(\?.+)* это хорошо для URL :)
EZW
Это правильно проверяет все мои абсолютные URL-адреса, но не мои относительные URL-адреса. :) может быть, я могу немного изменить его. Я попробую изменить его... мои знания в регулярном выражении довольно плохи. Большое спасибо за этот пост... он там на 90%... это делает меня намного ближе :D
Andreas Gieriet
Что именно Вы имеете в виду под "проверкой"? Вы хотите проверить, являются ли URL-адреса формально правильными, то есть в соответствии с соответствующими RFC 1738 и википедия: URL?
Какие из перечисленных Вами URL-адресов считаются правильными, на ваш взгляд? http://machine.domain.gaga/ формально корректен, но имеет бессмысленную часть имени хоста (gaga).
Вы также можете столкнуться с # и & и % и ? и = и ; в задней части это может иметь прекрасный смысл. Каково ваше ожидание от "проверки" на них (см. RFC выше еще раз). Пожалуйста, обратите внимание, что только полный URL-адрес является правильным URL-адресом, если схема отсутствует, вы можете угадать схему, но это чистая эвристика. Возможно, вам нужно улучшить свой вопрос (и решить, чего вы действительно хотите достичь), чтобы любой здесь мог дать вам удовлетворительный ответ. Я думаю, что требования сформулированы недостаточно хорошо. Это может быть причиной, по которой вы не достигаете, чтобы получить рабочее решение.
Кстати: я думаю, вы не можете легко решить его с помощью *одного* регулярного выражения. Вероятно, вам нужно разбить текст на различные части и проверить их по отдельности (не обязательно с помощью регулярных выражений).
Овации
Энди
EZW
Привет, большое спасибо за этот конструктивный ответ. URL-адреса будут сгенерированы системой, поэтому они будут действительны при нормальных обстоятельствах, но эти сгенерированные URL-адреса будут находиться в таком месте, где они могут быть изменены пользователем (например, в URL-запросе), поэтому мне нужно проверить его, если он находится в правильном формате, чтобы я не оставлял систему открытой для атак. Ведут ли URL-адреса куда-то, мне все равно... если они никуда не ведут, у меня есть запасной вариант (или если он не открывается, выполните действие по умолчанию). Мне просто нужно регулярное выражение, которое проверяет (или подтверждает), что URL-адрес находится в приемлемом формате (как примеры (которые являются исчерпывающими), показанные в исходном сообщении).