我需要有一個文本輸入字段做或不做基本計算。例如帶有一個輸入字段的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