这种过滤逻辑:(1 and 2) or 3
可以用Python或Javascript实现,任何想法?我没有发现谷歌。
我的意思是,用户将在textarea中键入过滤器,需要检查过滤器的语法(带正则表达式的mb)和解析过滤器。
有效和无效过滤器的示例:
1 or 2 : valid
(1 and 3) or 2 : valid
(1 or 2 and ) 3 : invalid
1 and 2 (or 3) : valid
1 (2 and 3) : invalid
任何想法如何做到这一点?
答案 0 :(得分:0)
AFAIK,因为布尔表达式可以有多个嵌套级别 - 这不是常规语言,因此如果不对输入施加一些约束,就不可能为此创建正则表达式。
在python中,我会使用eval
来实现这一点。如果语法不正确,则会抛出异常。正如评论中所提到的,考虑到这在安全方面存在风险,因此我会首先检查输入文本以避免注入。看一些例子:
In [11]: eval('1 or 2')
Out[11]: 1
In [12]: eval('1 (2 and 3)')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-12-96e407050456> in <module>()
----> 1 eval('1 (2 and 3)')
<string> in <module>()
TypeError: 'int' object is not callable
In [13]: eval('1 and 2 (or 3)')
File "<string>", line 1
1 and 2 (or 3)
^
SyntaxError: invalid syntax
In [14]: eval('(1 and 3) or 2')
Out[14]: 3