2012-05-12 51 views
0

我想對您構建一個簡單的正則表達式的意見來驗證逗號分隔的文件擴展名列表(在逗號字符之前或之後可能有一個或多個空格)。preg_match文件列表的擴展名爲

這個正則表達式應該返回以下值:

$list = 'jpg,png,gif'; // valid 
$list = 'jpg , png, gif'; // valid 
$list = 'jpg'; // valid 
$list = 'jpg, png, gif'; // valid 
$list = 'jpg png, gif'; // INVALID 
$list = 'jpg png'; // INVALID 

我使用下面的正則表達式,你覺得這是什麼?它可以優化還是縮短?

if(!preg_match('#^[0-9a-zA-Z]+([ ]*,[ ]*[0-9a-zA-Z]+)*$#' , $list)) 
{ 
    echo 'invalid extension list'; 
} else{ 
    echo 'valid extension list'; 
} 

感謝您的好建議

回答

1

您還可以縮短一點:

preg_match('#^\w+(\s*,\s*\w+)*$#' , $list) 
+0

謝謝。我將使用\的速記。 \ w是包含下劃線字符的模式,這是我不想要的。問候。 – Vincent

2

也許一個更簡單的方法是通過,分裂,看看是否有任何結果的包含空間(S)。

function isvalid($var) 
{ 
    return !strpos ($var, ' '); 
} 

$array = explode (',', $list); 
$array_filtered = array_filter ($array, 'isvalid'); 

if ($array == $array_filtered) { 
    echo 'Valid'; 
} 
else { 
    echo 'Invalid'; 
} 

這應該比使用正則表達式更快。

+0

謝謝。我只是做了一些性能測試,看起來如果列表包含5+值,則正則表達式會更快。問候。 – Vincent