可能重复:
JavaScript中算术表达式的安全评估
我正在尝试构建一个在线计算器,作为我一直在开发的网站的一部分。
我的操作符包括:+ - * / () AVG MIN MAX sine cos 等等
,还有数字、运算符和函数的按钮。我只是将按下的任何按钮附加到一个字符串上。
我必须在UI端构建一个基本的语法检查器。服务器将实际执行操作并存储和显示它们。我不想花太多时间编写客户端代码,但我的想法是验证它是否数学上合理。
这是我的计划:
我将尝试对生成的字符串进行eval()
并捕获错误。如果错误是synatxError,则意味着该字符串在语法上是错误的。如果它是任何其他类型的错误,我都可以接受。
所以我在脚本开始时做了这个:
Error.prototype.dummy_attribute = "notSyntaxError"
SyntaxError.prototype.dummy_attribute = "SyntaxError"
上述方法对我不起作用,因为如果有字符串链接2()
,我会收到类型错误。现在我必须编写一段代码来检查空括号和没有运算符前置的括号,或者没有运算符后跟的括号。
或者,我是否可以使用替代方法来检查我所拥有的字符串的语法,以查看它是否在数学上有意义。