2011-04-13 107 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 
} 
相关问题