-2

我有以下代码:

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

函数 calculate_string() 必须计算字符串中给出的数学表达式作为参数。第一次调用 string1 效果很好。

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

请帮忙。

4

1 回答 1

0

好的,所以您想在以下运动中进行运动*3+*

$string2 = " (1 + 1) *3+* (2 + 2)";

好吧,您可以通过多种方式执行此操作,通过自己检查字符串是否存在一些常见错误或检查eval()的返回值(文档):

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

于 2012-11-28T20:34:14.903 回答