You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel7中如何执行字符串格式的算术表达式得到正确计算结果?

Laravel 7 字符串算术表达式计算实现方案

常见eval踩坑说明

你使用eval($val)没有返回预期结果,大概率是写法遗漏了return关键字,标准写法如下,搭配字符过滤可保证安全:

$val = '1000*2';
// 仅允许数字、四则运算符号、括号和空格
if (preg_match('/^[0-9+\-*\/() ]+$/', $val)) {
    $result = eval("return $val;");
    // 输出结果为2000
    echo $result;
}

生产环境推荐方案(无eval安全风险)

Laravel 依赖的 Symfony 生态提供了专门的表达式计算组件,无需自己写解析逻辑,安全稳定:

  1. 安装组件
    composer require symfony/expression-language
  2. 使用示例
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;

$el = new ExpressionLanguage();
$val = '1000*2';
$result = $el->evaluate($val);
// 输出2000
echo $result;

注意事项

  • 不可直接执行未过滤的用户传入表达式,避免远程代码执行风险
  • 若仅需要处理固定规则的简单运算,也可以自行拆分字符串计算,比如针对乘号场景:
    $val = '1000*2';
    [$num1, $num2] = array_map('intval', explode('*', $val));
    $result = $num1 * $num2;
    
  • 如果需要全局调用,可以把逻辑封装为辅助函数放到app/helpers.php,在composer.json的autoload.files配置项中添加该文件路径,执行composer dump-autoload后即可全局调用

内容的提问来源于stack exchange,提问作者Vzqivan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:45:04