2016-07-30 2 views
0

Я знаю, что вы можете использовать массивы с preg_replace, но мне нужно совместить 2 массива. 1 массив с запретных символов, а другой с переменными, которые я хочу его найти в принципе:.Использование массивов в preg_match()

$invalidChars = array("#/#", "#\\#", "#'#", "#\"#"); 
$matchIn = array("var1" => $var1 , "var2" => $var2); 

Если я следующее, чтобы соответствовать им:

if(preg_match($invalidChars, $matchIn)){ 
    echo "Invalid chars found"; 
    die(); 
}else{ 
    "No invalid chars"; 
    die(); 
} 

затем PHP бросает меня следующая ошибка

Warning: preg_match() expects parameter 2 to be string, array given 

Если это не представляется возможным использовать preg_match с 2 массивов, как бы я проверить, если переменные содержат один или несколько недопустимых charachters?

+0

Пожалуйста, попробуйте использовать этот, из StackOverflow: http://stackoverflow.com/questions/8627334/how-to-search-in-an-array-with-preg- матч – Vyacheslav

ответ

1

preg_match() может принимать только строки как рисунок. Нет никаких оснований для поддержки массивов, поскольку для соответствия всем этим символам можно сделать один шаблон регулярных выражений.

$invalidChars = "#[/\\\\'\"]#"; 

Второй параметр также может быть только строкой. В данном конкретном случае вы можете просто конкатенации строк, чтобы проверить их все, так как вы ищете отдельные персонаж:

if (preg_match("#[/\\\\'\"]#", implode('', $matchIn)) 
{ 
    ... 

Но обычно вы бы перебрать субъект и проверить их по отдельности:

foreach ($matchIn as $subject) 
    if (preg_match("#[/\\\\'\"]#", $subject)) 
    { 
     ... 
+0

О, да, очевидно. Спасибо, но как насчет второго массива со всеми моими переменными? Должен ли я preg_match каждую переменную seperatly – SirMaxime

+1

* «Но обычно вам придется перебирать темы ...» *: вы можете использовать 'preg_grep' http://php.net/manual/en/function.preg-grep .php –

+0

Чтобы увидеть буквальную обратную косую черту в строке шаблона, вам понадобится 4 обратных слэша. Вы можете использовать только 3 обратных слэша, если следующий символ не является второй частью escape-последовательности * (вы можете написать '\\\ '', но не '\\\ n') *. –

0

попробовать этот Funciton,

function validate($invalidChars,$matchIn){ 
    foreach($invalidChars as $invalidChar){ 
     if(preg_match($invalidChar, $matchIn)){ 
      echo "Invalid chars found"; 
      return; 
     } 
    } 
     echo "No invalid chars"; 
     return; 
} 
Смежные вопросы