Javascript 如何从一个文本框计算数学方程,该文本框的公式类似于带等号的excel框

Javascript 如何从一个文本框计算数学方程,该文本框的公式类似于带等号的excel框,javascript,php,math,textbox,formula,Javascript,Php,Math,Textbox,Formula,我有一个php站点,在表单中有文本框。我希望能够在文本框中键入=4*6或=5/12*30,不带引号,并让它计算框中的公式。我知道如何将文本框上的onchange调用到javascirpt函数,但我不确定如何让它读取公式。我在谷歌上搜索了javascript和php的数学,除了预先确定的数字和等式符号之外,我没有发现任何其他东西。谢谢你的帮助 谢谢我开始研究这个想法: 我从这个答案中借用了想法的第二部分: 我想一旦你们有了一个数字和运算符的数组,就像在例子中一样,你们也许可以建立一个运算顺序记住,

我有一个php站点,在表单中有文本框。我希望能够在文本框中键入=4*6或=5/12*30,不带引号,并让它计算框中的公式。我知道如何将文本框上的onchange调用到javascirpt函数,但我不确定如何让它读取公式。我在谷歌上搜索了javascript和php的数学,除了预先确定的数字和等式符号之外,我没有发现任何其他东西。谢谢你的帮助


谢谢

我开始研究这个想法:

我从这个答案中借用了想法的第二部分:

我想一旦你们有了一个数字和运算符的数组,就像在例子中一样,你们也许可以建立一个运算顺序记住,请原谅我亲爱的萨莉阿姨。。switch case函数的类型,它将递归地在数组中循环,首先查找要执行的操作,然后对数组的周围数字执行操作

sudo代码将是:

if (arrayValues[i]) == '*'{
 arrayValues[i-1] * arrayValues[i+1];
 arraryvalues[i-1] = results;
 //then pop off the next two items in the array.
//Then go back through the array
}

这是我的第一个想法。

对于简单的计算,您可以使用$eval使用AngularJS轻松完成。 在输入字段中添加ng model=formula,然后用{{$evalformula.substring1}显示结果

下面是一个示例代码:

<label>Type formula:</label>
<input type="text" ng-model="formula" placeholder="=1+1">
<h1>result: {{$eval(formula.substring(1))}}</h1>
您可以在此处查看它的操作:

如果您想使用普通JavaScript,可以使用eval。
如果您输入的值是以=sign开头的变量公式,则可以通过evalformula.substring1获得结果,但请注意,标准eval的安全性不如angular的$eval。

可能与我尝试过的方法相同,但不起作用。我下载了parser.js,包括它。我有:console.info Parser.evaluate 2*3+4//14号指纹看起来很好用。2*3+4等于14。A 3+4=7。B 2*7=14。从这个框架中有没有办法将结果放在同一个文本框中?从一开始就计算出来了吗?看起来good@varcor下面是一个工作示例:。但是你不能使用ng change,因为它会激发每一个新字符,比如按键。所以我用ng模糊和ng键控来模拟它。这正是我需要的。谢谢@varcor-不要使用$eval!!!这在你的应用程序中是一个很好的安全漏洞。用户可以直接访问您作用域上的所有内容,包括函数。纯javascript评估更糟糕。@Justin808如果您在指令中使用隔离作用域,则作用域中没有其他内容,并且没有“安全漏洞”!因此,请不要因此而降低这个答案的等级,只要向varcor展示如何使用隔离作用域就可以了。顺便说一句,您总是使用控制台访问所有javascript对象和所有作用域,因此您所谓的“安全漏洞”在所有网页上都可用!这是解决问题的正确逻辑。Kpym的答案是否定的。即便如此,为什么要重新创建轮子?你说得很好,如果有一个安全的库已经在做这件事,我建议使用它。如果您还没有使用Angular,那么仅在该操作中包含Angular是相当重的。这里是我的建议,更具体一点:它将完成所要求的简单版本。