2010-07-15 38 views
0

它表示它“期望参数1是字符串”。所以我想你不能在preg_match中有一个数组。但是我应该用什么来代替?谢谢preg_match array

$config['forbidden_names'] = array('admin', 'moderator', 'hoster'); 


if (preg_match($config['forbidden_names'], $string)) echo "Forbidden name!"; 

编辑:in_array也许。大声笑。 IM愚蠢

回答

1
if (in_array($string, $config['forbidden_names'])) 
    echo "Forbidden name!"; 

或者,如果你必须使用正则表达式:

if (preg_match('/^(?:admin|moderator|hoster)$/', $string)) 
    echo "Forbidden name!"; 
+0

您的正则表达式确实匹配以“admin”开头,在任何位置拥有“moderator”或以“hoster”结尾的字符串。 – Gumbo 2010-07-15 18:12:32

+0

@Gumbo嗯该死的优先。修正了,但随时随地编辑。 – Artefacto 2010-07-15 18:30:53

0

试试这个

if (preg_match('/(admin|moderator|hoster)/i', $string)) echo "Forbidden name!"; 

BTW我宁愿添加到您的角色的模型/表中的新列/设置VAR是管理用户可以添加的东西。这对我来说看起来不安全。

+0

这正是我们不想做的。这个数组只是一个例子。 – 2010-07-15 18:10:48

+0

这是一个非常糟糕的例子,因为我可以在用户可以编辑他的角色的图像上显示图像,并且只需编辑dom,他就可以为自己分配一个管理员角色。所以不知道他有什么要求 – antpaw 2010-07-15 18:12:52

1

更改您的第二行:

if (in_array($string, $config['forbidden_names'])) echo "Forbidden name!"; 

的preg_match使用正则表达式,你应该远离它,除非你真的需要通过正则表达式字符串搜索,因为它是缓慢的。