2016-04-06 50 views
0

我一直在使用插件,并且此插件有一个自定义字段检查,它似乎不起作用。在用于检查具有特定条件的自定义字段的插件的代码下方。preg_match():分隔符不能是字母数字或带自定义字段检查的反斜杠

<?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; 
    } 
}?> 

问题就出在 '包含' 行内,给下面的错误在我的debug.log:

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

该检查用于检查自定义字段是否包含'30','text1'或'text2'。

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

回答

0

preg_match预计的顺序是:preg_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) 
... 
+0

当我读到这我认为它会起作用,可悲的是它不会。我相信有时wordpress中的一个自定义字段会返回'Array'。 preg_match()对阵列不起作用吗? –

+0

该手册声明,它只返回1(找到),0(找不到)和FALSE(如果发生错误) – noreabu

+0

对我来说,一个错误发生,但未知原因。我想是因为它是一个数组,但我可能是错的。我已经联系了开发人员,并会在收到答案时进行更新。 –

相关问题