2012-06-01 81 views
2

我有一個文本輸入,用戶會寫一個字符串,例如10+20-10-2*2+4/2,我想按順序進行算術運算,這意味着我想要(10+20)-(10)-(2)*(2)+(4)/(2),結果應該是20根據上面的例子。在javascript中的順序算術運算

換句話說,我想從左邊開始依次進行算術運算。任何人都可以幫助我,或者可能有一些想法也會很好。謝謝。

請問我是否需要更多信息。

$('#calculation').on('blur', function(e){ 
    e.preventDefault(); 
    var pattern=/^[-*/+0-9]+$/; 
    value=$(this).val(); 
    if(value.match(pattern)) 
    { 

     $(this).closest('tr').find('span.error').html(''); 
     //$('#total').val(eval(value)); 
     // No idea what to do 

    } 
    else 
    { 
     $(this).closest('tr').find('span.error').html('Invalid character'); 
    } 
}); 
+0

[你嘗試過什麼?](http://whathaveyoutried.com) –

+0

這將是更好的發佈你試過什麼,什麼問題了。否則,它聽起來有點像「請給我代碼」的問題.... –

+0

好吧,給我一些時間。 –

回答

2

Try this:

var str = '10+20-10-2*2+4/2'; 
var numbers = str.replace(/ /g, '').split(/[-+*\/]/g); 
var operators = str.replace(/ /g, '').split(/\d*/g); 
operators.shift(); 

var result = +numbers[0]; 

for (var i = 0; i < operators.length - 1; i++) { 
    result = eval(result + operators[i] + numbers[i + 1]); 
} 

alert(result)​; 

DEMO

+0

如果您以負數開頭,該怎麼辦? –

+0

@SamDufel,我得跑,但隨時編輯我的答案,以解決這個 – qwertymk

+0

非常感謝,它的工作。 –

0

如何使用eval計算值。

$('#calculation').on('blur', function(e){ 
    e.preventDefault(); 
    var pattern=/^[-*/+0-9]+$/; 
    value=$(this).val(); 
    if(value.match(pattern)) 
    { 

     $(this).closest('tr').find('span.error').html(''); 
     //$('#total').val(eval(value)); 
     alert(eval(value)); 
     $('span.result').html(eval(value)); 

    } 
    else 
    { 
     $(this).closest('tr').find('span.error').html('Invalid character'); 
    } 
});​ 

觀看演示http://jsfiddle.net/gineshkumar/gRc9r/

+0

也許你沒有正確地閱讀我的問題,eval不會從左側開始順序執行。 eval會輸出'18',但我希望它是'20'。 –