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 生态提供了专门的表达式计算组件,无需自己写解析逻辑,安全稳定:
- 安装组件
composer require symfony/expression-language - 使用示例
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
相关产品推荐
相关产品推荐

