【发布时间】:2011-04-30 11:37:20
【问题描述】:
允许用户输入他们喜欢的任何数学方程(带有一个变量):
x + 5
1 - x/2
(x/3) * (56/13)
这些以字符串形式存储在数据库中。当它们被检索到时,我需要用“x”替换一个数字并检查方程的值。
我该怎么做?
我正在考虑编写一个解析器来解构字符串并将它们转换为方程式,但这听起来很昂贵且有问题。另一种选择是通过 eval 传递它们(但如果我能提供帮助,我不太喜欢使用 eval)。
有什么想法吗?
更新: 我还需要能够获得诸如“(x > 5)”之类的布尔值。 evalMath 无法做到这一点
更新 2: 我需要一秒钟发射 lots 的这些。我一直在研究 php 中的 eval 但无法让它返回 (5 > 4) 的布尔值但是我注意到 js 会这样做...也许我应该调查 node.js...
更新 3: 在尝试了一些有趣的 node.js(并让它工作)之后,我回去让 eval 在 PHP 中工作,请参阅:Can php eval return a boolean value?
因此,我将使用 eval 对用户输入进行非常非常硬核的过滤器。
【问题讨论】:
-
如果你需要做更复杂的事情,wolframalpha.com/developers.html">WolframAlpha为开发者提供了一个API。
-
@TheMagician 好主意,但不幸的是这些需要经常触发(每秒数千次),因此外部 api 不起作用。