我需要有一个文本输入字段做或不做基本计算。例如带有一个输入字段的PHP计算器
<input type="text" />
我然后通过邮寄提交和后就会知道要么进入价值或做计算
价值的例子
14.5
10.3+14+35
应该分别给我
14.5
59.3
有没有人知道一种方法,脚本,......要做什么?或者有关如何去解决这个问题的想法?
谢谢。
我需要有一个文本输入字段做或不做基本计算。例如带有一个输入字段的PHP计算器
<input type="text" />
我然后通过邮寄提交和后就会知道要么进入价值或做计算
价值的例子
14.5
10.3+14+35
应该分别给我
14.5
59.3
有没有人知道一种方法,脚本,......要做什么?或者有关如何去解决这个问题的想法?
谢谢。
不使用eval,但你仍然需要小心,并抓住任何解析错误,例如试图评估')'等。我有想法,但会留给读者或另一个下雨天。
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
一个快速的解决方案是检查substr()
输入是否有任何数学运算符(+, - ,...)。如果是这样,使用eval()
(很肮脏的黑客,因为它接受所有PHP代码,而不仅仅是数学)或者手动构建适当的操作树,然后产生结果来进行数学计算。如果没有数学运算符,只需打印输入。
用下面的正则表达式可以检查该输入是否是有效的数学语法和使用eval():
/^(\(*[\+\-]?\(*[\+\-]?\d+(.\d+)?\)*[\+\-\*\/]?)*$/
允许的字符是:1 2 3 4 5 6 7 8 9 0。 + - * /()
总是有'eval()'......我不敢将它作为答案发布 - 我相信它会引发火焰。 – 2011-06-14 06:34:43
@Wesley Murch让火焰开始吧! – zaf 2011-06-14 06:37:32
类似:http://stackoverflow.com/questions/1015242/how-to-evaluate-formula-passed-as-string-in-php – DhruvPathak 2011-06-14 06:58:20