2011-06-14 76 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。 + - * /()