Javascript 过滤报告中的逻辑
这种过滤逻辑:Javascript 过滤报告中的逻辑,javascript,python,filter,logic,Javascript,Python,Filter,Logic,这种过滤逻辑:(1和2)或3 可以用Python或Javascript实现,有什么想法吗?我在谷歌上什么也没找到。 我的意思是,用户将在textarea中键入filter,需要检查filter的语法(使用regex的mb)并解析filter。 有效和无效筛选器的示例: 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和2)或3
可以用Python或Javascript实现,有什么想法吗?我在谷歌上什么也没找到。
我的意思是,用户将在textarea中键入filter,需要检查filter的语法(使用regex的mb)并解析filter。
有效和无效筛选器的示例:
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
有什么办法吗?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
[11]中的:eval('1或2')
Out[11]:1
在[12]中:eval('1(2和3)'
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
---->1评估('1(2和3)'
在()
TypeError:“int”对象不可调用
在[13]中:eval('1和2(或3)'
文件“”,第1行
1和2(或3)
^
SyntaxError:无效语法
[14]中:eval(‘(1和3)或2’)
Out[14]:3
我只想指出,将用户输入的文本作为Python命令进行计算是多么不明智。