检查字符串是否包含计算

时间:2016-04-26 14:08:16

标签: javascript string eval

问题与标题一样简单:如何确保字符串包含计算。

我有一个应该包含计算的字符串。字符串可以是这样的:>>> 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())。

有谁知道如何检查字符串是否包含计算而没有其他内容?

3 个答案:

答案 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),那么你不要评估它。