像报告一样过滤逻辑

时间:2014-07-27 14:05:04

标签: javascript python filter logic

这种过滤逻辑:(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

任何想法如何做到这一点?

1 个答案:

答案 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