2011-06-29 65 views
1

我正在開發一個web應用程序,用戶無論是在這種格式輸入自己的Facebook頁面網址: http://www.facebook.com/pages/Graffiti/119622954518拿Facebook頁面的url和店鋪ID和塞獨立

http://www.facebook.com/thefirkinandfox

用PHP - 怎麼辦我會自動檢測哪種格式,然後拆分(爆炸?)部件(如果第二個版本,部件和內部編號或只是部件)。

當以管理員身份查看自己的Facebook頁面時,有時候會在查詢數據的末尾找到網址,我該如何檢測並刪除它?我認爲答案將是某種類型的正則表達式 - 但我真的只是用它來確保輸入是電子郵件,但仍然沒有很好地理解它......先謝謝了。

可能entires可能會或可能不包含http://開頭......我想解釋這個...

回答

2

如果你想使用一個正則表達式,試試這個:

$url = 'www.facebook.com/pages/Graffiti/119622954518'; 
if(preg_match('@^(https?://)?(www\.)?facebook\.com/((pages/([^/]+)/(\d+))|([^/]+))@', $url, $matches)) { 
    $slug = isset($matches[5]) ? $matches[5] : (isset($matches[7]) ? $matches[7] : null); 
    $id = isset($matches[6]) ? $matches[6] : null; 
} 
+0

@RReverser,嗨,感謝您與「www.facebook.com/pages/Graffiti/119622954518」和「http:// www.facebook.com/pages/Graffiti/119622954518」的配合。任何想法檢測它是否以這種格式輸入:'http:// www.facebook.com/thefirkinandfox'?謝謝 –

+0

@Andypandy:我認爲IF的else {}部分應該是另一種格式 – Abhay

+0

@Andypandy:我認爲如果你在@RReverser回答中更改最後一部分,它應該也適用於其他URL。嘗試將'|([^ /] +)'正則表達式的末尾改爲'|(\ w +)',保持其他所有內容都一樣。 – Abhay

0

兩個部分:

^http://www.facebook.com/pages/([^/]+)/([^/]+)(?:\?.*)$ 

如果第一個不匹配,使用此:

^http://www.facebook.com/([^/]+)(?:\?.*)$ 

爆炸,你提到的是捕獲組的價值。

因此,代碼可能是這個樣子:

$subject = "my string"; 
if (preg_match ('#^http://www.facebook.com/pages/([^/]+)/([^/]+)(?:\?.*)$#', $subject)) 
    print ($groups[1] + ' ' + $groups[1]); 
else if (preg_match ('#^http://www.facebook.com/([^/]+)(?:\?.*)$#', $subject)) 
    print ($groups[1]); 
+0

感謝任何機會,你會解釋,進一步和一些示例代碼 - 看起來像法國人。謝謝 –

+0

@AndyPandy,PHP不是我的語言之一,但是這是對的。 –