2013-07-31 80 views
0

我正在尋找某種形式的輸入安全性,我正在對一個項目進行研究。 基本上我希望標記文本,如果用戶輸入任何形式的URL。PHP在字符串中查找任何形式的URL

IE「欲瞭解更多我的照片訪問myhotpic.net的」

因此,它會檢測到一個URL,然後我可以標誌通過工作人員驗證字符串。 所以我需要檢查任何形式的URL。

還有一個類似的問題在這裏 Finding urls from text string via php and regex? 與答案。但我已經厭倦了這種各種字符串,我沒有得到預期的結果。

例如

$pattern = '#(www\.|https?:\/\/){?}[a-zA-Z0-9]{2,254}\.[a-zA-Z0-9]{2,4}(\S*)#i'; $count = preg_match_all($pattern, 'http://www.Imaurl.com', $matches, PREG_PATTERN_ORDER);

收益爲

array(3) { 
    [0]=> 
    array(0) { 
    } 
    [1]=> 
    array(0) { 
    } 
    [2]=> 
    array(0) { 
    } 
} 

相匹配,並且沒有錯誤通過preg_last_error()

返回這是爲什麼不工作? Regex中是否有錯誤?當其他用戶使用它時,我會認爲它沒問題。

我似乎無法爲其他地方的問題找到合適的答案。

+1

把'{?}'變成只是'?',它似乎工作正常。不知道'{?}'應該做什麼;我從來沒有見過這樣的事情。 – sgroves

+0

我只想找「www」,「http」,任何東西。[a-z] {2,3}等。如果只想檢測url並且不需要實際提取它,這應該可以正常工作。 – MightyPork

+1

@mightypork如果其中一個字符串包含文字談論HTTP協議?或'www'用來代表笑聲?我不確定這麼簡單是最好的方法。使用完整的正則表達式沒有任何問題;這個不是很複雜。 – sgroves

回答

1

在正則表達式中,將{?}更改爲?。然後它會工作。不知道{?}應該是什麼意思(我從來沒有見過這樣的東西)。

你的正則表達式將工作的優良一些網址,但你應該知道,URL可以是複雜得多,你可能會認爲,和正則表達式可以匹配 URL是非常複雜的。您可能想要查找更好的正則表達式 - 您只需要一個足夠複雜的處理您期望匹配的各種URL。