首先,@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 「。前綴 - 你永遠不會知道可以使用哪個子域名,而且通常會被忽略。 還要注意的是有更多的頂級域名的不僅僅是.COM
對於「其他」的網址給Facebook,你可以只認準錨
^https?://
這是從你的問題還不清楚用戶是否輸入這些進入你的系統,還是它的以不受控制的方式完成。請注意,人們通常會忽略http前綴,所以這不是真正可靠的檢測URL的方式。
如果您正在尋找網址的HTML頁面中的鏈接,他們可以通過搜索錨更可靠地檢測:
<a\s+(?:.*?)href=['"]?(https?://[^'^"^\s]+)(?:.*?)>
這是清爽的設計存儲類型,而不是依賴於內容搞清楚什麼類型可能是。在你的情況下,可以告訴類型,但想象一下,如果添加了其他類型,現在需要更改(複雜)邏輯來添加新類型。在某些情況下,甚至可能是不可能的。所以我會建議存儲類型。 – 2011-04-12 01:26:14