2012-05-12 47 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