Как узнать, является ли текстовая строка URL-адрес facebook, адрес электронной почты или другой URI? - PullRequest
0 голосов
/ 12 апреля 2011

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

  1. ресурс Facebook (в основном URL, начинающийся с "facebook.com")
  2. Адрес электронной почты (любой действительный адрес электронной почты)
  3. Другой URL
  4. (поддельный / трэш / и т.д.)

4-й не важен.

Мне нужно делать разные вещи в зависимости от типа адреса (FB API / отправить e-mail / POST форму). Я думал о том, чтобы просто сохранить, какой это тип, но сначала хочу спросить, есть ли какое-нибудь регулярное выражение или подобное, чтобы знать, что это за тип.

Первый из них прост, просто проверьте, начинается ли он с "http://www.facebook.com".. Для остальных я думал о поиске токенов, таких как" http://" или "@", но потом я подумал, что оба могут содержать оба из них.

1 Ответ

1 голос
/ 12 апреля 2011

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

Но да, в этом случае можно использовать регулярное выражение:

Следующее регулярное выражение является типичным электронным письмомдетектор.Гораздо безопаснее использовать, чем просто знак «@»:

([a-zA-Z]+[a-zA-Z0-9._+\-]{3,}(?:@|%40)[a-zA-Z0-9]+[a-zA-Z0-9\.\-]?(?:\.[a-zA-Z]+)+)

Следующие три найдут профили и страницы Facebook.Вы можете избавиться от суффикса, чтобы остаться только с доменом (ами) Facebook, или провести дальнейшее исследование и редактирование, чтобы ограничиться другими видами ресурсов Facebook:

facebook\.(?:com?\.|net\.)?[a-z]{2,3}/.+\?id=(\d+)
facebook\.(?:com?\.|net\.)?[a-z]{2,3}/p\.php.+i=(\d+)
facebook\.(?:com?\.|net\.)?[a-z]{2,3}/(\w[\w\.\-]+\w)(?:$|[/\?#])

Избегайте префикса 'http://www.'- вы никогда не знаете, какой поддомен может быть использован, плюс они часто опускаются.Также обратите внимание, что в Facebook больше tld, чем просто .com

Для «других» URL вы можете просто найти привязку

^https?://
Из вашего вопроса неясно, вводят ли пользователи их в вашу систему, илисделано ли это неконтролируемым образом.Обратите внимание, что люди часто пропускают префикс http, поэтому это не совсем надежный способ определения URL-адресов.

Если вы ищете URL-адреса в качестве ссылок на HTML-страницах, их можно надежнее обнаружить с помощью поиска якорей:

<a\s+(?:.*?)href=['"]?(https?://[^'^"^\s]+)(?:.*?)>
...