我需要有一个文本输入字段做或不做基本计算。实施例
<input type="text" />
然后我通过邮寄提交,帖子将知道输入值或进行计算
值示例
14.5
10.3+14+35
应该分别给我
14.5
59.3
有没有人知道方法,脚本......这样做的事情是什么?或者关于如何去做的任何想法?
感谢。
答案 0 :(得分:4)
不使用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
答案 1 :(得分:0)
使用以下正则表达式,您可以检查输入是否是有效的数学语法并使用eval():
/^(\(*[\+\-]?\(*[\+\-]?\d+(.\d+)?\)*[\+\-\*\/]?)*$/
允许的字符是:1 2 3 4 5 6 7 8 9 0。 + - * /()
答案 2 :(得分:-1)
一个快速的解决方案是使用substr()
检查输入中是否包含任何数学运算符(+, - ,...)。如果是这样,使用eval()
进行数学计算(非常脏的黑客,因为它接受所有PHP代码而不仅仅是数学)或手动构建适当的操作树,然后生成结果。如果没有数学运算符,只需打印输入。