检查字符串是否包含计算
Check if string contains calculation
问题和题目一样简单:How do I make sure a string contains a calculation
我有一个应该包含计算的字符串。该字符串可能是这样的:"10 * 10 / 2 * 3"
。但是总有人想把东西弄坏,所以我想看看是不是算计的。用户可以这样填写:"alert('hi!')"
.
当我使用eval()
时,它仍然会提示用户(如果用户填写:"alert()"
)。
有谁知道如何检查字符串是否只包含计算而没有其他内容?
如果你只想检查一个字符串是否包含算术运算,你可以用这样的正则表达式匹配它:
([-+]?[0-9]*\.?[0-9]+[\/\+\-\*])+([-+]?[0-9]*\.?[0-9]+)
但是,我强烈建议使用 javascript 库作为 mathjs, or the JavaScript Expression Evaluator library,你可以用它来做,例如:
Parser.evaluate("3 ^ x", { x: 7 });
这些库会注意忽略代码注入,当然...:-)
在这种情况下,我会推荐一个不同的解决方案。
与其尝试 white list
您的字符串以确保它只是数学表达式,我建议您首先尝试使用专门用于处理数学的库。
我没有这方面的经验,但是 "javascript math parsers" 的快速 google 让我想到了这个:http://mathjs.org/docs/expressions/parsing.html
您可以只检查字符的输入字符串。如果字符串包含 (a,b,c ... z) 之类的任何字符,则不要对其求值。
问题和题目一样简单:How do I make sure a string contains a calculation
我有一个应该包含计算的字符串。该字符串可能是这样的:"10 * 10 / 2 * 3"
。但是总有人想把东西弄坏,所以我想看看是不是算计的。用户可以这样填写:"alert('hi!')"
.
当我使用eval()
时,它仍然会提示用户(如果用户填写:"alert()"
)。
有谁知道如何检查字符串是否只包含计算而没有其他内容?
如果你只想检查一个字符串是否包含算术运算,你可以用这样的正则表达式匹配它:
([-+]?[0-9]*\.?[0-9]+[\/\+\-\*])+([-+]?[0-9]*\.?[0-9]+)
但是,我强烈建议使用 javascript 库作为 mathjs, or the JavaScript Expression Evaluator library,你可以用它来做,例如:
Parser.evaluate("3 ^ x", { x: 7 });
这些库会注意忽略代码注入,当然...:-)
在这种情况下,我会推荐一个不同的解决方案。
与其尝试 white list
您的字符串以确保它只是数学表达式,我建议您首先尝试使用专门用于处理数学的库。
我没有这方面的经验,但是 "javascript math parsers" 的快速 google 让我想到了这个:http://mathjs.org/docs/expressions/parsing.html
您可以只检查字符的输入字符串。如果字符串包含 (a,b,c ... z) 之类的任何字符,则不要对其求值。