我正在建立一个系统,用户可以输入自己的表达式.
我已经将searched全部从of到了internet,但似乎找不到如何在执行之前验证用户输入的表达式的示例.
是否存在“标准方法”或“最佳实践”来验证用户输入的表达式,还是我必须进行自己的验证?
编辑
我只想允许用户过滤表(数组),所以我猜表达式不会过于复杂.
因此对于带有标题的数组,例如array(‘id’,’firstName’,’lastName’,’docId’,’profit’);我期望像这样的表达式:row.id< 2和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
}
但是,我们无法按类型控制错误:
>语法无效
>找不到变量
>意外令牌
>找不到功能
>等…
作为解决方案(坏主意),您可以通过文本来控制类型(例外).