Php preg_match():分隔符不能是字母数字或带有自定义字段检查的反斜杠

Php preg_match():分隔符不能是字母数字或带有自定义字段检查的反斜杠,php,wordpress,plugins,preg-match,contains,Php,Wordpress,Plugins,Preg Match,Contains,我一直在使用一个插件,这个插件有一个自定义字段检查,它似乎不起作用。下面是用于检查具有特定条件的自定义字段的插件代码 <?php if ($custom_field_value != null) { if (($set['condition']['value']['operator'] == 'is' && $set['condition']['value']['value'] == $custom_field_value) || ($set['condit

我一直在使用一个插件,这个插件有一个自定义字段检查,它似乎不起作用。下面是用于检查具有特定条件的自定义字段的插件代码

<?php if ($custom_field_value != null) {
    if (($set['condition']['value']['operator'] == 'is' && $set['condition']['value']['value'] == $custom_field_value)
    || ($set['condition']['value']['operator'] == 'is_not' && $set['condition']['value']['value'] != $custom_field_value)
    || ($set['condition']['value']['operator'] == 'contains' && preg_match($set['condition']['value']['value'], $custom_field_value)) //The problematic line.
    || ($set['condition']['value']['operator'] == 'does_not_contain' && !preg_match($set['condition']['value']['value'], $custom_field_value))
    || ($set['condition']['value']['operator'] == 'lt' && $set['condition']['value']['value'] < $custom_field_value)
    || ($set['condition']['value']['operator'] == 'le' && $set['condition']['value']['value'] <= $custom_field_value)
    || ($set['condition']['value']['operator'] == 'eq' && $set['condition']['value']['value'] == $custom_field_value)
    || ($set['condition']['value']['operator'] == 'ge' && $set['condition']['value']['value'] >= $custom_field_value)
    || ($set['condition']['value']['operator'] == 'gt' && $set['condition']['value']['value'] > $custom_field_value)) {
        $proceed = true;
    }
}?>

问题出现在“contains”行中,并在my debug.log中给出以下错误:

PHP警告:preg_match():分隔符不能是字母数字或反斜杠

该检查用于检查自定义字段是否包含“30”、“text1”或“text2”


现在我可能错了,但我相信我没有在这里使用任何分隔符。这里可能出现什么问题?

preg\u match
希望参数按以下顺序排列:
preg\u match($pattern,$string)
。此外,该模式还需要如所述分隔符那样的前斜杠。因此,一个可能的解决办法是:

...
|| ($set['condition']['value']['operator'] == 'contains'
    &&  preg_match('/' . $custom_field_value . '/', $set['condition']['value']['value'] ))
|| ($set['condition']['value']['operator'] == 'does_not_contain'
    && !preg_match('/' . $custom_field_value . '/', $set['condition']['value']['value'] ))
...
如果要进行简单检查,如果自定义字段中有字符串,出于性能原因,我建议使用
strpos

...
|| ($set['condition']['value']['operator'] == 'contains'
    &&  strpos($set['condition']['value']['value'],$custom_field_value) > 0)
|| ($set['condition']['value']['operator'] == 'does_not_contain'
    &&  strpos($set['condition']['value']['value'],$custom_field_value) == FALSE)
...

当我读到这篇文章时,我认为它会起作用,但遗憾的是它没有。。我相信wordpress中的自定义字段有时会返回
Array
。可能是preg_match()对数组不起作用吗?手册声称,它只返回1(对于已找到的)、0(对于未找到的)和FALSE(如果发生错误),但我不知道为什么会发生错误。我认为这是一个数组,但我可能错了。我已经联系了开发人员,并将在收到答复后更新。啊,sry我误读了评论。。。如果需要,可以提供有关$custom\u field\u value变量赋值的更多信息吗?“丑陋”的解决方法也可以是
(is_array($custom_field_value))?内爆($custom\u field\u value):$custom\u field\u value但最好先用var_dump()检查$custom_field_value的内容