Основное регулярное подтверждение веб-адреса? - PullRequest
4 голосов
/ 21 января 2010

Я ищу регулярное выражение, которое проверяет простые адреса веб-сайтов, например

Мне нужно это для контактных данных, поле 'Website', затем, когда пользователь нажимает на него, открывается IE, это не обязательнострогий , я просто не хочу, чтобы пользователь вводил «я люблю молоко» или «гугл» и т. д.

Я подумал, вместо того, чтобы сузить свой ум, сочиняя свои собственные попытки найти исключение, почему бы неЯ учусь на опыте сообщества, всем, у кого есть хорошие регулярные выражения или ссылки, пожалуйста, пишите.

Большое спасибо.

Ответы [ 5 ]

7 голосов
/ 21 января 2010

С RFC 3986, унифицированные идентификаторы ресурсов (URI): общий синтаксис , приложение B (стр. 50):

^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?

Если URI соответствует этому регулярному выражению, оно правильно сформировано. Группы матчей дают вам различные части, которые:

scheme    = $2
authority = $4
path      = $5
query     = $7
fragment  = $9
1 голос
/ 21 января 2010
https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?

выдержка из http://snipplr.com/view/2371/regex-regular-expression-to-match-a-url/


 (https?://)?([-\w\.]+)+(:\d+)?

пересмотреть каждое предложение, но я думаю, что люди должны лучше следовать подсказке и самим найти ответ в любом случае, даже копируя / вставляя, люди должны знать, что они делают.

0 голосов
/ 21 января 2010

Один вариант без использования регулярных выражений, но address должен начинаться с протокола, подобного http://:

static bool validateAddress(string address)
{
    Uri valid = null;
    return 
        address.StartsWith("http") &&
        Uri.TryCreate(address, UriKind.Absolute, out valid);
}
0 голосов
/ 21 января 2010

Проверка или обнаружение URL-адресов не так просты, как кажется. Это сообщение в блоге, которое углубляется в эту тему:

http://www.blog.activa.be/2008/10/30/ExtractingURLsNotPerfectButQuotgoodEnoughquot.aspx

, а также:

https://blog.codinghorror.com/the-problem-with-urls/

0 голосов
/ 21 января 2010

Я также упомянул RFC 3986, но он слишком общий, поскольку он также соответствует относительным URL-адресам. Очевидно, что в случае с OP нам нужны абсолютные общедоступные URL.

Что-то вроде ^(https?://)?(?:[\w.]+)\.(?:[\w:.]+) кажется более реалистичным. Я намеренно исключаю сайты, которым требуется пара имя пользователя / пароль, но принимаю номер порта.
Такое выражение будет нарушено, когда URL-адреса Unicode станут обычным явлением ...

[РЕДАКТИРОВАТЬ] Я принял любую схему, я должен ограничить больше, я полагаю, нет необходимости принимать адреса ftp или bzr + ssl: // для открытого случая ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...