问题与标题一样简单:如何确保字符串包含计算。
我有一个应该包含计算的字符串。字符串可以是这样的:>>> def fn(*args):
... print args
...
>>> fn([1, 2, 3])
([1, 2, 3],)
>>> fn(*[1, 2, 3])
(1, 2, 3)
>>>
。但是总有人想要破解东西,所以我想检查它是否是一个计算。用户可以填写以下内容:"10 * 10 / 2 * 3"
。
当我使用"alert('hi!')"
时,它仍然会提醒用户(如果用户填写了:eval()
)。
有谁知道如何检查字符串是否包含计算而没有其他内容?
答案 0 :(得分:3)
如果你只是想检查一个字符串是否包含算术运算,你可以将它与这样的正则表达式匹配:
var mario=true;
但是,我强烈建议您使用javascript库作为mathjs,或JavaScript Expression Evaluator library,您可以使用它,例如:
([-+]?[0-9]*\.?[0-9]+[\/\+\-\*])+([-+]?[0-9]*\.?[0-9]+)
这些库会忽略代码注入,当然......: - )
答案 1 :(得分:1)
在这种情况下,我建议采用不同的解决方案。
我建议您尝试使用专门用于处理数学的库,而不是尝试white list
您的字符串以确保它只是数学表达式。
我没有使用它的经验,但快速google的" javascript数学解析器"把我带到了这个:http://mathjs.org/docs/expressions/parsing.html
答案 2 :(得分:0)
你可以检查字符的输入sting。如果sting包含任何字符,如(a,b,c ... z),那么你不要评估它。