在preg_match()中使用数组

时间:2016-07-30 21:55:26

标签: php arrays pcre

我知道你可以在preg_replace中使用数组,但我需要匹配2个数组。 1个数组带有禁止的字符,另一个带有我希望它找到的变量。 基本上是:

sharedPreferences.edit().putString("key", "value").apply();

如果我执行以下操作以匹配它们:

sharedPreferences.getString("key", "default_value");

然后PHP抛出以下错误

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

如果不能将preg_match与2个数组一起使用,我如何检查变量是否包含一个或多个无效的字符?

3 个答案:

答案 0 :(得分:1)

preg_match()只能接受字符串作为模式。它没有理由支持数组,因为可以使用单个正则表达式模式来匹配所有这些字符。

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

第二个参数也可以只是一个字符串。在这种特定情况下,您可以连接字符串以测试它们,因为您正在寻找单个字符:

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

但通常你必须遍历主题并单独测试它们:

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

答案 1 :(得分:0)

试试这个功能,

function validate($invalidChars,$matchIn){
    foreach($invalidChars as $invalidChar){
        if(preg_match($invalidChar, $matchIn)){
            echo "Invalid chars found";
            return;
        }
    }
        echo "No invalid chars";
        return;
}

答案 2 :(得分:0)

我做了类似的事情。这是我用来解决该问题的代码的一些细微变化:

public function remove_value_from_array($val, &$arr) {
   array_splice($arr, array_search($val, $arr), 1);
}

public function filter($invalidChars, $matchIn){
   $values = array_values($matchIn);
   /*Then you build the regular expression you will need for filtering.*/
   /*With $invalidChars = array("#/#", "#\\#", "#'#", "#\"#"), you will get "#/#|#\\#|#'#|#\#"*/
   $regex = implode("|", $invalidChars);
   $filtered_values = array_filter($values, function($value) use ($regex){
      preg_match ('/'.$regex.'/i', $value, $matches); return count($matches) > 0;
   });

   foreach($filtered_values as $value){
      remove_value_from_array($value, $matchIn);
   }

   return $matchIn;


}

但是您需要转义$ invalidChars数组值,因为它们包含特殊字符(#,...)。