preg_replace любые слова в сумме - PullRequest
0 голосов
/ 22 марта 2019

Иногда я получаю тело, чтобы вычислить как этот.

$result = eval(45 + hjh + 78 + 89 + hello);

Мне нужно заменить все неисчислимое (как "hjh") на ноль везде в выражении, чтобы получить как этот.

$result = eval(45 + 0 + 78 + 89 + 0);

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Замените любой символ, который НЕ ^ в $allowed, на 0. Используемый разделитель ~ не может быть в $allowed, поэтому вы можете изменить его при необходимости:

$allowed = ' 0-9.*/+-';  //add everything that is allowed
$string = preg_replace("~[^$allowed]+~", '0', $string);

Однако это изменит такие вещи, как 1a + 1 на 10 + 1.

1 голос
/ 22 марта 2019

Нечто подобное может делать то, что вы хотите:

$s = "45 + hjh + 78 + 89 + hello";
$s = preg_replace("%[^-+*/0-9 ]+%","0",$s);
$result = eval ("return $s;");
echo "R=$result\n";

Но это обнаружение incalculables в регулярном выражении, скорее всего, прекратится в случае несколько большего творческого ввода.

...