使用 Eval 计算字符串中的数学表达式
问题:
当尝试计算使用 eval() 将数学表达式存储在字符串中,出现“解析错误”,表明存在输入意外结束。
解决方案:
虽然出于安全考虑,通常不建议使用 eval() 来实现此目的,但修改以下代码可以解决该问题:
$ma = "2+10"; $p = eval('return ' . $ma . ';'); print $p;
通过在 eval() 函数中显式返回结果,代码需要完整的一行
替代解决方案:
更安全、更高效的解决方案是使用分词器/解析器来处理数学表达式。这是一个基于正则表达式的简单示例:
$ma = "2+10"; if (preg_match('/(\d+)(?:\s*)([\+\-\*\/])(?:\s*)(\d+)/', $ma, $matches) !== FALSE) { $operator = $matches[2]; switch ($operator) { case '+': $p = $matches[1] + $matches[3]; break; case '-': $p = $matches[1] - $matches[3]; break; case '*': $p = $matches[1] * $matches[3]; break; case '/': $p = $matches[1] / $matches[3]; break; } echo $p; }
以上是如何安全地评估 PHP 中字符串的数学表达式?的详细内容。更多信息请关注PHP中文网其他相关文章!