2010-07-15 43 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使用正則表達式,你應該遠離它,除非你真的需要通過正則表達式字符串搜索,因爲它是緩慢的。