Php preg_替换总和中的任何单词

Php preg_替换总和中的任何单词,php,preg-replace,Php,Preg Replace,有时我会像这样评估身体 $result = eval(45 + hjh + 78 + 89 + hello); $result = eval(45 + 0 + 78 + 89 + 0); 我需要将表达式中的所有不可计算项(如“hjh”)替换为零,以得到这样的结果 $result = eval(45 + hjh + 78 + 89 + hello); $result = eval(45 + 0 + 78 + 89 + 0); 这样的事情可能会满足您的要求: $s = "45 + hjh +

有时我会像这样评估身体

$result = eval(45 + hjh + 78 + 89 + hello);
$result = eval(45 + 0 + 78 + 89 + 0);
我需要将表达式中的所有不可计算项(如“hjh”)替换为零,以得到这样的结果

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

这样的事情可能会满足您的要求:

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

但是在正则表达式中检测到的
不可计算的
可能会在输入更具创造性的情况下中断。

0
替换
$allowed
中不允许的任何字符。使用的delimeter
~
不能在
$allowed
中,因此您可以根据需要进行更改:

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

但是,这会将类似于
1a+1
的内容更改为
10+1

您在
eval
中失去了我,我猜您所说的hjh是指一个字符串:“hjh”?我说的对吗?我不喜欢什么?你认为我每次都使用eval在php中求和吗?是的,我需要将任何字符串删除为0,并将表达式保存为eval(四舍五入(45+0+78+89+0));我需要保存“回合”