【发布时间】:2012-11-28 20:29:53
【问题描述】:
我有以下代码:
<?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。
请帮忙。
【问题讨论】:
-
为什么你在正则表达式中有所有这些转义?
preg_replace('~[^0-9()*/.+-]~', '', $mathString)完全等同于你现在拥有的,但更具可读性。 -
您应该考虑使用像 Notepad++ 或 JEdit 这样的语法高亮文本编辑器,这将帮助您捕获解析错误,因为它会在错误源处破坏语法高亮。
-
“我如何检测 math.string 是否有 math.error in syntax” 编写一个合适的解析器而不是使用
eval()。
标签: php eval parse-error