如何知道文本字符串是facebook url,电子邮件地址还是其他uri?

我正在创建一个系统来注册不同的事件。对于每个事件,它存储一个地址,该地址可以是以下之一: Facebook资源(基本上以“facebook.com”开头的URL) 电子邮件地址(任何有效的电子邮件) 另一个URL (假/捶打/等) 第四不重要。 我需要做不同的事情,具体取决于地址的类型(FB API /发送电子邮件/ POST表格)。我正在考虑存储它的类型,但我首先要问的是是否有一些正则表达式或类似的知道它是什么类型。 第一个很简单,只需检查它是否以“http://www.facebook.com”开头。对于其他人,我考虑过寻找像“http://”或“@”这样的令牌,但后来​​我认为两者都可以包含这些令牌。     
已邀请:
首先,@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 |?。净)。?[A-Z] {2,3} /.+ ID =( d +) Facebook的(?: COM |?。净)。?[A-Z] {2,3} /p.php.+i =( d +) Facebook的(?: COM |网?。)[AZ] {2,3} /( W [ W - ] + W)(:???$ | [/ # ]) 避免使用'http:// www。'前缀 - 你永远不知道可以使用哪个子域,加上它们经常被省略。 另请注意,Facebook上的tld不仅仅是.com 对于“其他”网址,您只需查找锚点^ https?:// 从您的问题中不清楚用户是否将这些输入到您的系统中,或者是否以不受控制的方式完成。请注意,人们经常省略http前缀,因此这不是检测URL的可靠方法。 如果您在HTML页面中查找URL作为链接,可以通过搜索锚点来更可靠地检测到它们:
<as+(?:.*?)href=['"]?(https?://[^'^"^s]+)(?:.*?)>
    

要回复问题请先登录注册