JavaScript Валидность математического выражения
Есть различные выражения для калькулятора: "2+1", "13-3", "10/2" и т.д. Приходят с инпута
Всего 5 знаков: (+ - * % /), чисел в выражении всего два
Написал такую функцию:
function isValidMathExpression(exp) {
if (exp !== '') {
try {
const result = eval(exp);
return true;
} catch (e) {
return false;
}
} else {
return false;
}
}
Она проверяет валидность математического выражения. Но потом я прочел, что использовать eval не безопасно в инпутах, и переписал с использованием regex:
function isValidMathExpression(exp) {
if (exp !== '') {
try {
const result = /[\%\-\/\+\*]/.test(exp);
return true;
} catch (e) {
return false;
}
} else {
return false;
}
}
Но теперь он только лишь проверяет на наличие знаков, т.е. при не валидном "9+", вернёт всё равно true.
Нужна помощь, для написания емкой и красивой функции для валидации математических выражений
Ответы (1 шт):
eval() не стоит использовать, когда вы не знаете, что находится во входной строке. Если вы провалидируете строку и не допостите наличия там произвольного кода, то в целом никто не мешает вам использовать данную функцию. В вашем случае можно проверить, что строка состоит из цифр и математических знаков. Единственное, на что следует обратить внимание, что при проверке регулярки надо проверять всю строку от начала до конца, а не как у вас, на совпадение одного символа.
/^[\d\s%\/*+-]+$/