在阅读和重新阅读您的问题超过 20 次之后,我想我知道您要做什么。
对于每个字符串(一批文件),我运行两次preg_match()
检查。一种查找后缀为png
、gif
、jpg
、jpeg
或的文件bmp
。另一个在上述列表中寻找没有后缀的文件。
*注意:(*SKIP)(*FAIL)
是一种用于匹配并立即取消模式中字符资格的技术。
代码: ( PHP Demo ) ( Image Pattern Demo ) ( Non-Image Pattern Demo )
$tests=[
'Non-Images Only'=>'filename 1 (https://example.com/test.exe)',
'Mixed-Type'=>'filename 1 (https://example.com/test.pdf),
filename 2 (https://example.com/cool_image.jpg),
filename 3 (https://example.com/other-file.docx),
filename 4 (https://example.com/nice_image.png)',
'No Files'=>'filename 1 (),
filename 2 ()',
'Images-Only'=>'filename 1 (https://example.com/another.png),
filename 2 (https://example.com/cool_image.jpg))'];
$image_pattern='~\.(?:png|gif|jpe?g|bmp)\),?$~im';
$non_image_pattern='~\.(?:(?:png|gif|jpe?g|bmp)(*SKIP)(*FAIL)|[^.)]+)\),?$~im';
foreach($tests as $type=>$string){
echo "\t\tAssessing:\n---\n";
echo "$string\n---\n";
echo "Expecting: $type\n";
echo "Assessed as: ";
$has_image=preg_match($image_pattern,$string);
$has_non_image=preg_match($non_image_pattern,$string);
if($has_image){
if($has_non_image){
echo "Mix of image and non-image files";
}else{
echo "Purely image files";
}
}else{
if($has_non_image){
echo "Purely non-image files";
}else{
echo "No files recognized";
}
}
echo "\n----------------------------------------------------\n";
}
输出:
Assessing:
---
filename 1 (https://example.com/test.exe)
---
Expecting: Non-Images Only
Assessed as: Purely non-image files
----------------------------------------------------
Assessing:
---
filename 1 (https://example.com/test.pdf),
filename 2 (https://example.com/cool_image.jpg),
filename 3 (https://example.com/other-file.docx),
filename 4 (https://example.com/nice_image.png)
---
Expecting: Mixed-Type
Assessed as: Mix of image and non-image files
----------------------------------------------------
Assessing:
---
filename 1 (),
filename 2 ()
---
Expecting: No Files
Assessed as: No files recognized
----------------------------------------------------
Assessing:
---
filename 1 (https://example.com/another.png),
filename 2 (https://example.com/cool_image.jpg))
---
Expecting: Images-Only
Assessed as: Purely image files
----------------------------------------------------