我有一个允许用户输入JEXL表达式的应用程序。它们用作搜索过滤器。用户犯的一个常见错误是编写类似“A=5”的内容,并且当且仅当变量 A 包含值 5 时才期望过滤器为真。
是的,你是对的:= 运算符是赋值,用户应该使用 == 进行比较。像拒绝匹配正则表达式 [^=]=[^=] 的表达式这样的解决方法也不允许比较像 A=="foo=bar" 这样的字符串,因此它不是解决方案。
是否有机会通过运行时配置从 JexlEngine 中删除赋值运算符,以便在解析期间抛出异常?或者发现 JexlExpression 包含一个赋值?