Регулярное выражение для фильтрации имен файлов в PHP - PullRequest
1 голос
/ 21 апреля 2011

У меня есть строки, которые представляют пути к файлам. Что-то вроде этого.

folder1/folderA/file1.flv  
folder2/folderB/file1.mp4  
folder3/folderC/file1.jpg

Я пытаюсь написать выражение, которое в основном совпадает со списком допустимых расширений, таких как .flv, .mp4, .flv

Я уверен, что я далеко отсюда, но вот что у меня есть .[(\.flv/)|(\.wmv/)|(\.mp4)] комично, я уверен ... но, надеюсь, показывает суть.

Ответы [ 3 ]

4 голосов
/ 21 апреля 2011

В качестве альтернативы регулярному выражению вы можете использовать pathinfo(), который надежно получит расширение файла из пути.

$allowed_extensions = array("flv", "mp4", "mpeg"); # note: all lowercase

$ext = pathinfo("/folder1/folderA/file1.flv", PATHINFO_EXTENSION);

# Search array of allowed extensions
if (in_array(strtolower($ext), $allowed_extensions))
 echo "Okay";
else
 echo "Fail";
0 голосов
/ 22 апреля 2011
$str = "folder1/folderA/file1.jpg";
$found =  preg_match("/[.]+(jpg|flv)$/", $str, $returns);
print_r ($returns);
0 голосов
/ 22 апреля 2011

Если я правильно интерпретирую, вы, вероятно, просто хотите что-то вроде:

/[.](flv|mp4|wmv)$/

$ обеспечивает соответствие в конце строки / имени файла. Альтернативы перечислены в скобках, а [.] - просто более приятное обозначение для \.

...