Php 图像的通用文件扩展名的正则表达式是什么样子的?

Php 图像的通用文件扩展名的正则表达式是什么样子的?,php,regex,file-upload,mime,mime-types,Php,Regex,File Upload,Mime,Mime Types,我开始制作这样的图像,使其变成小缩略图 但是我需要一个正则表达式来检查它是否包含*.jpg、*.jpeg、*png、*.gif 这是怎么做到的?你不需要正则表达式就可以了 但是如果你真的想要一个正则表达式,你可以使用 (jpeg|png|gif|jpg)$ 它应该会成功的 我建议您使用substr,它会运行得更快 编辑 添加句点以检查扩展名,而不仅仅是名称末尾(或更长的扩展名),例如myjpg或otherfile.xgif: \.(png|gif|jpe?g)$ 如果测试字符串包含.jpeg

我开始制作这样的图像,使其变成小缩略图

但是我需要一个正则表达式来检查它是否包含
*.jpg、*.jpeg、*png、*.gif


这是怎么做到的?

你不需要正则表达式就可以了

但是如果你真的想要一个正则表达式,你可以使用

(jpeg|png|gif|jpg)$
它应该会成功的

我建议您使用substr,它会运行得更快

编辑
添加句点以检查扩展名,而不仅仅是名称末尾(或更长的扩展名),例如
myjpg
otherfile.xgif

\.(png|gif|jpe?g)$
如果测试字符串包含
.jpeg
.png
或其他可选内容,则匹配

\.(?:jpe?g|png|gif)$

如果测试字符串以
.jpeg
.png
等结尾,则将匹配。

以匹配图像的整个文件名

(^|\s+).+\.(jpe?g|png|gif|tiff)(\s+|$)
*注意:
^
$
匹配字符串的开头和结尾,因此如果要从较大的文本中提取名称,请删除这些字符。通过添加
空格
的字符串终止符(
^
$
)选项,它使文件名必须出现在字符串的开始/结束处,或两侧有空格。由于文件名中允许使用空格,这可能/可能不适用于OP,但是,我们没有太多关于他计划使用表达式的上下文的信息


要防止文件名仅为点,请执行以下操作:

^.?[^\.]+\.(jpe?g|png|gif|tiff)$

不要微优化。如果有足够多的替代方案编译成一个快速的trie数据结构,那么
substr
将不会运行得更快,这是现代perls所出现的。这并不是OP所要求的。什么是
(?:)
\b
用于?@Brad
?:
非捕获组(因为我们不使用任何扩展),
\b
边界(因为我们不想匹配<代码>查看我的.GIFS ),这取决于ReGEX引擎,也可以考虑类似于<代码>的查找表。(?@Peter,但是你假设文件名实际上不是
,我上传了.jpg
,技术上可能是这样。OP需要提供更多的上下文。很好。重新阅读这个问题,我实际上认为OP是在尝试基于扩展名进行mime类型检查(而不是检查文件的前4/8字节)。为什么
^.+
\(jpe?g | png | gif | tiff)$
是相同的。前导的点加号确保您不匹配只有扩展名的文件,即以点开头的文件,如
name=“.jpg”
。但是,
.jpg
仍然有效。这将仅在扩展名位于字符串末尾时匹配-@Karem请求在字符串中的任何位置找到它的正则表达式(“contains”)。这可能不是他的意思,但谁知道呢?@tchrist对不起,你是对的。
^.
应该是相同的,而不是
^.+
.Oops。@Brad:没错,假设匹配应该总是在结尾是合理的。但我想指出这个假设,至少应该提到这个正则表达式的真正功能。如果确实删除了
$
,则可能应该将其替换为
\b
。尽管这只是OP不希望
匹配的另一种假设。tiffany
匹配:)Karem,为了得到正确的解决方案,你需要回答一些重要的问题…为什么你认为你需要这个正则表达式?~~你在使用什么语言或软件?~~如果我将一个非图像文件重命名为fake.jpg,你的缩略图转换器会做什么?@Peter boughton,我在使用PHP,我正在尝试这样做,它显示出一点小问题通过您输入的url设置图像的扩展名。这是坏的吗?仅仅因为某个东西的扩展名为.jpg(或其他),并不意味着它实际上是一个jpeg-尤其是当您通过web接受内容时。如果您只检查扩展名,恶意用户可能会向您提供一个伪造的jpeg,从而使服务器崩溃(或更糟)。我不能给出一个具体的PHP示例,但基本上对于jpeg来说,您检查前四个字节是“FFD8”,最后四个字节是“FFD9”,然后您可能得到了一个有效的图像-其他示例就是您刚才描述的内容,这是否也需要在我的profileimage上载中进行检查(与此问题无关),现在我的图像上载只检查扩展名,如果它是常见图像之一,则继续。谢谢链接,我可以在不保存图像的情况下进行检查吗?我将就此提出一个新问题。感谢您扩展我的知识。
^.?[^\.]+\.(jpe?g|png|gif|tiff)$