首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何禁用JEXL赋值?

如何禁用JEXL赋值?
EN

Stack Overflow用户
提问于 2021-01-25 18:45:46
回答 2查看 64关注 0票数 0

我有一个允许用户输入JEXL表达式的应用程序。它们用作搜索筛选器。用户经常犯的一个错误是编写类似"A=5“的代码,并期望过滤器在且仅当变量A包含值5时为真。

是的,你是对的:=运算符是赋值,用户应该已经使用了==进行比较。像拒绝匹配正则表达式^==^=的表达式这样的变通方法也不允许比较像A=="foo=bar“这样的字符串,因此它不是解决方案。

是否有机会通过运行时配置从JexlEngine中删除赋值操作符,以便在解析期间抛出异常?或者发现JexlExpression包含一个赋值?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-25 19:56:03

因此,JEXL API看起来并没有提供对语法树或定义允许的操作符的任何访问。到目前为止,对我有帮助的是修改了我的JexlContext实现。

通过重写set方法来抛出异常,至少我在运行时会得到一个错误。我仍然希望在表达式的解析时出现错误,但这可以节省时间。

票数 0
EN

Stack Overflow用户

发布于 2021-02-03 14:24:23

如果你可以使用JEXL 3.2主干(即从源代码中构建它),有一种方法可以通过“特性”来实现这一点,方法是禁用副作用和全局副作用。

代码语言:javascript
复制
JexlFeatures features = new JexlFeatures().sideEffect(false).sideEffectGlobal(false);
...
JexlInfo info = ...
JexlScript script = jexl.createScript(features, info, source);
...

createScript将抛出一个JexlException.Feature,指示语法功能被禁用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65883190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档