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

Другие решения

Других решений пока нет …