我有以下代码:
<?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。
请帮忙。
答案 0 :(得分:0)
好的,所以你想在{:1}}中运动:
*3+*
您可以通过多种方式执行此操作,方法是检查字符串是否存在常见错误,或检查$string2 = " (1 + 1) *3+* (2 + 2)";
的返回值(docs):
从PHP 7开始,如果评估代码中存在解析错误,则eval() 抛出ParseError异常。在PHP 7之前,在这种情况下eval() 返回FALSE并继续正常执行以下代码。 使用eval()时无法捕获解析错误 的set_error_han dler()。