2016-11-20 25 views
-4

我不問如何驗證上傳文件轉換的文件類型的列表,在正則表達式

我需要設置一個PHP的正則表達式是這樣的:從

'/\.(pdf|doc|docx)$/i' 

像這樣的列表:

.pdf,.doc,.docx 

目標是在上載表單中設置接受文件類型。

我想:

$filetype_arr = explode("," , ".pdf,.doc,.docx"); 
$filetype_str = '/\.('; 
for ($i=0; $i < count($filetype_arr) ; $i++) { 
    $filetype_ext = explode("." , $filetype_arr[$i]); 
    $pipe = ""; 
    if ($i < count($filetype_arr) - 1) $pipe = "|"; 
    $filetype_str .= $filetype_ext[1] . $pipe; 
} 
$filetype_str .= ')$/i'; 
// $filetype_str = '/\.(pdf|doc|docx)$/i' 

'accept_file_types' => $filetype_str, 

而且沒有工作,但:

'accept_file_types' => '/\.(pdf|doc|docx)$/i', 

作品。

編輯: 正如標題所說:「我需要一個列表轉換的正則表達式在PHP」 ......我不問如何驗證上傳文件,它不是複製。 這個正則表達式將被插入一個上傳文件的庫中,我只需要從動態列表中設置有效的擴展名。

'accept_file_types' => '/\.(' . $myDynamicList . ')$/i', 

簡化:

不要工作:

$validFile = '/\.(' . str_replace(',.', '|', ".pdf,.doc,.docx") . ')$/i'; 
'accept_file_types' => $validFile, 

它的工作原理:

'accept_file_types' => '/\.(pdf|doc|docx)$/i', 

非常感謝

+0

你有一個類似''pdf,.doc,.docx「'的字符串,並且你想從這個字符串構造一個正則表達式,對吧? –

+0

@TomaszKowalczyk請閱讀編輯,謝謝。 – ale

+0

@RuslanOsmanov是的! – ale

回答

0
$spec = '.pdf,.doc,.docx'; 
$regex = substr($spec, 1); 
$regex = str_replace(',.', '|', $regex); 
$regex = '/\.(' . $regex . ')$/'; 

echo preg_match($regex, 'filename.pdf') ? 'matched' : 'not matched'; 
echo "\n"; 
echo preg_match($regex, 'filename.xyz') ? 'matched' : 'not matched'; 
echo "\n";