2011-04-13 59 views
2

我需要一個正則表達式來檢測字符串中的文件名 - 查看它是否以.pdf或.PDF結尾 - 不區分大小寫。甚至應該匹配.pdf或pdf的任何變體,以防用戶具有混亂的文件名。正則表達式來檢測文件擴展名

這將在PHP 5中使用。我知道我可以製作一堆行來測試每種情況,但我確定有一種更優雅的方式來執行此操作。

+0

請再具體些。你的字符串本身只是一個文件名,還是它是一個更長的字符串,包含一個或多個文件名以及其他一些文本? – ridgerunner 2011-04-13 23:56:10

回答

9

沒有什麼錯用正則表達式是,但也有ready-made function用於解剖的路徑,並從中提取擴展:

echo pathinfo("/path/to/myfile.txt", PATHINFO_EXTENSION); //.txt 
+0

除了這實際上並不指向文件 - PDF附件的「標題」字段取決於放置的文件名,然後用戶可以覆蓋它(因此可以使用諸如REPORT_2008_PICNET.pdf之類的雜亂PDF標題變成PICNET財務報告(2008年),但有時他們可能不會覆蓋它,在這種情況下,我需要弄清楚是否將.pdf添加到下載頭文件中,謝謝 – jeffkee 2011-04-15 21:13:43

+0

@jeffkee我不確定我是不是' m跟着你:你需要確保文件以.pdf結尾嗎?然後使用'pathinfo()'獲取擴展名將可以工作,如果你比較小寫字母與「pdf」,你會知道你是否需要添加是否擴展或不擴展,你使用的是完整路徑還是純文件名,對'pathinfo()'應該沒有意義 – 2011-04-15 21:15:25

+0

但是pathinfo()函數只對實際文件有效嗎?標題「字段是虛構的,在某種程度上,所有的PDF文件以附件[id] .pdf格式保存在服務器上,並且每個在MySQL數據庫中都有相應的標題。因此,需要爲擴展名而不是實際文件檢查字段字符串。無論如何,所有文件都會自動重新命名爲.pdf。 – jeffkee 2011-04-15 21:28:33

0

這個怎麼樣。我不知道你正在使用什麼語言,但這裏是一個正則表達式來匹配以.pdf結尾的任何東西。

.+([.][Pp][Dd][Ff]){1} 

我的不好。我半睡着了。它是PHP。 不知道的PHP但正則表達式應該工作

0

另一種可能性是TOLOWER擴展

strtolower(pathinfo("/path/file.pDf", PATHINFO_EXTENSION)) == ".pdf" 
0

正如其他人所指出的,提取的延長會的工作,否則,你可以做這樣的事情。

preg_match('/.*\.pdf/i', "match_me.pDf", $matches);

+0

關閉,但'/.* \。pdf/i'需要一個字符串結束符。否則,它匹配:'file.pdflipingout.txt' – ridgerunner 2011-04-14 00:03:13

+0

好的呼叫。 – photoionized 2011-04-14 16:41:02

0

如果字符串由一個單一的文件名的下面是一個簡單的正則表達式的解決方案:

if (preg_match('/\.pdf$/i', $filename)) { 
    // Its a PDF file 
} 
相關問題