2011-06-14 64 views
4

我需要有一个文本输入字段做或不做基本计算。例如带有一个输入字段的PHP计算器

<input type="text" /> 

我然后通过邮寄提交和后就会知道要么进入价值或做计算

价值的例子

14.5 
10.3+14+35 

应该分别给我

14.5 
59.3 

有没有人知道一种方法,脚本,......要做什么?或者有关如何去解决这个问题的想法?

谢谢。

+3

总是有'eval()'......我不敢将它作为答案发布 - 我相信它会引发火焰。 – 2011-06-14 06:34:43

+1

@Wesley Murch让火焰开始吧! – zaf 2011-06-14 06:37:32

+0

类似:http://stackoverflow.com/questions/1015242/how-to-evaluate-formula-passed-as-string-in-php – DhruvPathak 2011-06-14 06:58:20

回答

4

不使用eval,但你仍然需要小心,并抓住任何解析错误,例如试图评估')'等。我有想法,但会留给读者或另一个下雨天。

reference site

function calculate_string($mathString) { 

    // trim white spaces 
    $mathString = trim($mathString); 

    // remove any non-numbers chars; exception for math operators 
    $mathString = ereg_replace ('[^0-9\+-\*\/\(\) ]', '', $mathString); 

    $compute = create_function("", "return (" . $mathString . ");"); 
    return 0 + $compute(); 

} 

$string = " (1 + 1) * (2 + 2)"; 
echo calculate_string($string); // outputs 8 
+0

同样在这里 - 开放的错误。 http://codepad.org/vAnHYOd6 – 2011-06-14 06:52:25

+0

@韦斯利:“对错误开放”与“安全漏洞”不一样。 @ zaf的答案是对问题的解决方案......这个问题并没有问及如何保证有效的语法树。 – Tom 2011-06-14 06:54:33

+0

@Tom谢谢汤姆 - 我正准备花一整天的时间让它防弹... – zaf 2011-06-14 06:56:58

-1

一个快速的解决方案是检查substr()输入是否有任何数学运算符(+, - ,...)。如果是这样,使用eval()(很肮脏的黑客,因为它接受所有PHP代码,而不仅仅是数学)或者手动构建适当的操作树,然后产生结果来进行数学计算。如果没有数学运算符,只需打印输入。

0

用下面的正则表达式可以检查该输入是否是有效的数学语法和使用eval():

/^(\(*[\+\-]?\(*[\+\-]?\d+(.\d+)?\)*[\+\-\*\/]?)*$/ 

允许的字符是:1 2 3 4 5 6 7 8 9 0。 + - * /()

相关问题