首先,@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]+)(?:.*?)>