PHP eval解析错误

时间:2012-11-28 20:29:53

标签: php eval parse-error

我有以下代码:

<?php
function calculate_string( $mathString )    {
   $mathString = trim($mathString);     // trim white spaces
   $mathString = preg_replace("/[^0-9\(\)\+\-\*\/\.]/", "", $mathString);       
   return eval("return $mathString;");   
 }

$string1 = " (1 + 1) *3+ (2 + 2)";
echo calculate_string($string1);
$string2 = " (1 + 1) *3+* (2 + 2)";
echo calculate_string($string2);
?>

function calculate_string()必须计算字符串中给出的数学表达式作为参数。第一次调用string1工作正常。

但是,我怎么能检测出数学。字符串有数学。语法错误,如seconda调用, 并返回一些取决于错误类型的值,或简单的返回什么(更好的解决方案)? 因此,当数学表达式包含语法错误时,问题是第二次调用中的parse_error。

请帮忙。

1 个答案:

答案 0 :(得分:0)

好的,所以你想在{:1}}中运动:

*3+*

您可以通过多种方式执行此操作,方法是检查字符串是否存在常见错误,或检查$string2 = " (1 + 1) *3+* (2 + 2)"; 的返回值(docs):

  

从PHP 7开始,如果评估代码中存在解析错误,则eval()   抛出ParseError异常。在PHP 7之前,在这种情况下eval()   返回FALSE并继续正常执行以下代码。   使用eval()时无法捕获解析错误   的set_error_han dler()。