如何检查字符串只包含图片网址

时间:2018-02-23 02:13:11

标签: php regex preg-match preg-match-all image-file

我正在尝试根据它包含的文件的后缀来评估字符串。

我需要区分仅包含图像文件的字符串(.png.gif.jpg.jpeg.bmp)和包含的字符串图像和非图像文件的混合。

我做错了什么?

if (preg_match('~\.(png\)|gif\)|jpe?g\)|bmp\))~', $data->files)) {
  echo 'image only;'
} else {
  echo 'image + other types';
}

包含混合物的示例字符串:

filename 1 (https://example.com/test.pdf),
filename 2 (https://example.com/cool_image.jpg),
filename 3 (https://example.com/other-file.docx)

仅包含图像的示例字符串:

filename 1 (https://example.com/another.png),
filename 2 (https://example.com/cool_image.jpg)

2 个答案:

答案 0 :(得分:4)

正则表达式错误。每次延期后您都有getLink()。这将有效:

)

完整示例:

~\.(png|gif|jpe?g|bmp)~i

Demo

使用更正后的正则表达式,现在您可以检查该批文件是仅包含图像,图像和文件,还是仅包含文件。我们已经完成了第一部分(检查是否有图像)。有了这个正则表达式,我们可以检查是否有非图像:

<?php
if (preg_match('~\.(png|gif|jpe?g|bmp)~i', "https://example.com/test.png")) {
  echo 'image only';
}
else {
  echo 'image + other types';
}

它使用负向前瞻来断言扩展在行中不匹配。最后,有一个非捕获组来检查行尾或逗号(以符合您的格式)。

最后,检查两个正则表达式,看看每个批次真正包含的内容:

/^(?!.*[.](png|gif|jpe?g|bmp))(?:.*$|,)/im

注意:使用@ mickmackusa的测试列表

Demo

答案 1 :(得分:2)

您正在逃避括号,因此他们会逐字接受治疗。

您正在寻找的正则表达式只是:$

.jpg.exe

请注意,最后的(\.png|gif|jpe?g|bmp)$表示字符串的结尾是至关重要的;没有它,字符串的任何部分都是有效的匹配。因此,https://example.com/test.pdf https://example.com/other-file.docx https://example.com/cool_image.jpg.exe https://example.com/cool_image.jpg 等文件将被视为&#39;图像&#39;。

对字符串运行正则表达式i

~(\.png|gif|jpe?g|bmp)$~i

显示只有最终链接匹配。

可以看到 here

请注意,您也可能希望在正则表达式的末尾抛出:修饰符以允许大写的文件扩展名。这可以使用re.split()完成。