2013-04-29 2 views
1

Я хочу, чтобы мой пользователь написал простой расчет в поле, а затем вычислил, что они написали в событии onBlur(). Скажем, они пишут 5*(3+5)-10, а затем, когда они меняют фокус, я хочу рассчитать результат и написать обратно в том же текстовом поле. Я хорошо знаю, как обрабатывать все события, я просто хочу знать, знаете ли вы о существовании скрипта, который может вычислить эти простые символические вычисления (мне нужно только */- +). Я googled, но я ничего не нашел ... Спасибо!Javascript - Выполнить расчет пользователя

+1

Можете ли вы опубликовать некоторые коды, что вы пробовали до сих пор – polin

ответ

3

Вы можете использовать eval, но вы должны дезинфицировать вход первого только разрешения разрешенных символов.

if (/[^0-9.*/+()-]/.test(expr)) { 
    alert("illegal expression"); 
} else { 
    var res = eval(expr); 
} 

тест будет гарантировать, что пользователь не может попытаться подорвать eval, чтобы сделать его запустить произвольный, поставляемом JavaScript код.

+0

полезно поместить eval в try/catch, чтобы предотвратить ошибки в выражении –

1

Выполняет ли eval ваши потребности?

> eval('5*(3+5)-10') 
30 
+0

Да, я думаю, что это то, что я искал! Благодаря! –

0

В качестве отправной точки, это может помочь:

var calcApp={}; 

calcApp.isValidExpression=function(expression){ 
    return expression.match(/[^0-9+-\\*\\/\(\)]/)==null; 
}; 

calcApp.calculate=function(expression){ 
    val=0; 
    if(calcApp.isValidExpression(expression)){ 
      val=eval(expression);  
    } 
    return val; 
}; 

$(".calculator").blur(function(e){ 
    $(".result").html(calcApp.calculate($(e.target).val())); 
}); 

Нет errorchecking для falsy выражений -подобных "1 + *" включен.

+0

, нет необходимости выходить (большинство) символов внутри символьного диапазона '[]'. Поступая таким образом, вы неправильно разрешаете символ '\'. – Alnitak

Смежные вопросы