Я хочу, чтобы мой пользователь написал простой расчет в поле, а затем вычислил, что они написали в событии onBlur()
. Скажем, они пишут 5*(3+5)-10
, а затем, когда они меняют фокус, я хочу рассчитать результат и написать обратно в том же текстовом поле. Я хорошо знаю, как обрабатывать все события, я просто хочу знать, знаете ли вы о существовании скрипта, который может вычислить эти простые символические вычисления (мне нужно только */- +
). Я googled, но я ничего не нашел ... Спасибо!Javascript - Выполнить расчет пользователя
ответ
Вы можете использовать eval
, но вы должны дезинфицировать вход первого только разрешения разрешенных символов.
if (/[^0-9.*/+()-]/.test(expr)) {
alert("illegal expression");
} else {
var res = eval(expr);
}
тест будет гарантировать, что пользователь не может попытаться подорвать eval
, чтобы сделать его запустить произвольный, поставляемом JavaScript код.
полезно поместить eval в try/catch, чтобы предотвратить ошибки в выражении –
Выполняет ли eval ваши потребности?
> eval('5*(3+5)-10')
30
Да, я думаю, что это то, что я искал! Благодаря! –
Безопасное абсолютно не безопасно, но вы можете использовать eval()
функцию: http://jsfiddle.net/UQTY2/112/
В качестве отправной точки, это может помочь:
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 + *" включен.
, нет необходимости выходить (большинство) символов внутри символьного диапазона '[]'. Поступая таким образом, вы неправильно разрешаете символ '\'. – Alnitak
Можете ли вы опубликовать некоторые коды, что вы пробовали до сих пор – polin