带有一个输入字段的PHP计算器
我需要有一个文本输入字段做或不做基本的计算。范例带有一个输入字段的PHP计算器,php,input,Php,Input,我需要有一个文本输入字段做或不做基本的计算。范例 <input type="text" /> 应该分别给我 14.5 59.3 有人知道这样做的方法、脚本等吗?或者你知道怎么做吗 谢谢。一个快速解决方案是使用substr()检查输入中是否包含任何数学运算符(+、-、…)。如果是这样的话,可以使用eval()(这是一个相当肮脏的黑客行为,因为它接受所有的PHP代码,而不仅仅是数学),或者手动构建适当的操作树,然后生成结果。如果没有数学运算符,只需打印出输入。不使用eval,但您仍需
<input type="text" />
应该分别给我
14.5
59.3
有人知道这样做的方法、脚本等吗?或者你知道怎么做吗
谢谢。一个快速解决方案是使用
substr()
检查输入中是否包含任何数学运算符(+、-、…)。如果是这样的话,可以使用eval()
(这是一个相当肮脏的黑客行为,因为它接受所有的PHP代码,而不仅仅是数学),或者手动构建适当的操作树,然后生成结果。如果没有数学运算符,只需打印出输入。不使用eval,但您仍需要小心,并捕获任何解析错误,例如尝试计算“')”等。我有一些想法,但会留给读者或另一个雨天
使用以下正则表达式,可以检查输入是否为有效的数学语法,并使用eval()
允许的字符为:1 2 3 4 5 6 7 8 9 0.+-*/()总是有
eval()
。。。我不敢把它作为一个答案贴出来——我相信它会引来火焰。@Wesley Murch让火焰开始吧!类似:@Wesley:“容易出错”与“安全漏洞”不同@扎夫的回答是对这个问题的解决方案。。。这个问题并没有问到如何保证语法树的有效性。@Tom感谢Tom-我本来打算花一天的时间让它成为防弹的…@Tom:尽管这个问题没有问,但我们在给出建议时真的应该指出这些东西,就像zaf深思熟虑地选择做的那样。除此之外,我觉得必须有一个合法的方法来做这件事。@Wesley Munch也许你/我应该针对这种瘙痒提出一个问题。。。我有一些疯狂的想法…@卫斯理:对你来说,什么才是正确的解决方案?如果输入计算中存在语法错误,此答案将给出一个错误,可以使用异常处理程序将其定向回用户。“PHP计算器”还应该做什么?
14.5
59.3
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
/^(\(*[\+\-]?\(*[\+\-]?\d+(.\d+)?\)*[\+\-\*\/]?)*$/