如何验证符号表达式语言表达式


How to validate a symfony expression language expression

我正在制作一个系统,用户可以在其中输入自己的表达式。我搜索了所有的互联网,似乎找不到如何在执行之前验证用户输入的表达式的示例。

是否有"标准方法"或"最佳实践"来验证用户输入的表达式,或者我是否必须进行自己的验证?

编辑

我只想允许用户过滤一个表(数组),这样我想表达式就不会太复杂。

因此,对于像array('id', 'firstName', 'lastName', 'docId', 'profit');这样具有头的数组,我期望表达式像:row.id < 2 and row.profit <= 500

Symfony/ExpressionLanguage包有一个SyntaxError类,如果表达式中存在错误,则抛出此异常。

控制错误:

use Symfony'Component'ExpressionLanguage'ExpressionLanguage;
use Symfony'Component'ExpressionLanguage'SyntaxError;
$expressionLanguage = new ExpressionLanguage();
try {
    $expressionLanguage->evaluate('1 + b.foo');
} catch (SyntaxError $e) {
    // Error
}

但是,我们不能通过类型来控制错误:

  1. 无效语法
  2. 找不到变量
  3. 意外的令牌
  4. 找不到函数
  5. 等等

作为解决方案(坏主意),您可以通过异常中的文本来控制类型。