我正在制作一个系统,用户可以在其中输入自己的表达式。我搜索了所有的互联网,似乎找不到如何在执行之前验证用户输入的表达式的示例。
是否有"标准方法"或"最佳实践"来验证用户输入的表达式,或者我是否必须进行自己的验证?
编辑
我只想允许用户过滤一个表(数组),这样我想表达式就不会太复杂。
因此,对于像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
}
但是,我们不能通过类型来控制错误:
- 无效语法
- 找不到变量
- 意外的令牌
- 找不到函数
- 等等
作为解决方案(坏主意),您可以通过异常中的文本来控制类型。