0

我正在创建一个系统来注册不同的事件。对于每个事件,它存储一个地址,该地址可以是以下之一:

  1. Facebook 资源(基本上以“facebook.com”开头的 URL)
  2. 电子邮件地址(任何有效的电子邮件)
  3. 另一个网址
  4. (虚假/鞭打/等)

第4个不重要。

我需要根据地址类型(FB API/发送电子邮件/发布表单)做不同的事情。我正在考虑只存储它是什么类型,但我首先想问是否有一些正则表达式或类似的东西来知道它是什么类型。

第一个很简单,只需检查它是否以“http://www.facebook.com”开头。对于其他人,我想寻找像“http://”或“@”这样的标记,但后来我认为两者都可以包含这两者。

4

1 回答 1

1

首先,@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\.)?[az]{2,3}/.+\?id=(\d+)
facebook\.(?:com?\.|net\.)?[az]{2,3}/p\.php.+i=(\d+)
facebook\.(?:com?\.|net\.)?[az]{2,3}/(\w[\w\.\-]+\w)(?:$|[/\?# ])

避免使用“http://www”。前缀 - 你永远不知道可以使用哪个子域,而且它们经常被省略。另请注意,facebook 的 tld 不仅仅是 .com

对于“其他”网址,您只需查找锚点

^https?://
从您的问题中不清楚用户是否将这些输入到您的系统中,或者是否以不受控制的方式完成。请注意,人们经常忽略 http 前缀,因此这并不是检测 URL 的可靠方法。

如果您正在寻找作为 HTML 页面中的链接的 URL,则可以通过搜索锚点更可靠地检测到它们:

<a\s+(?:.*?)href=['"]?(https?://[^'^"^\s]+)(?:.*?)>
于 2011-04-12T06:21:04.923 回答