From 75cbcb652e6fb086592f3c09d4aac82b29251971 Mon Sep 17 00:00:00 2001 From: Mohammad Ashmir abbasi Date: Sun, 13 Apr 2025 07:14:17 +0530 Subject: [PATCH] Fix invalid input handling in calculator --- apps/javascript-calculator/client/index.jsx | 47 +++++++++++++++------ 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/apps/javascript-calculator/client/index.jsx b/apps/javascript-calculator/client/index.jsx index 8a5649fec..6f341c53b 100644 --- a/apps/javascript-calculator/client/index.jsx +++ b/apps/javascript-calculator/client/index.jsx @@ -54,6 +54,17 @@ class Calculator extends React.Component { handleEvaluate() { if (!this.state.currentVal.includes('Limit')) { let expression = this.state.formula; + if ( + expression === '' || + isOperator.test(expression[0]) || + endsWithOperator.test(expression) + ) { + this.setState({ + currentVal: 'Invalid Input', + formula: '' + }); + return; + } while (endsWithOperator.test(expression)) { expression = expression.slice(0, -1); } @@ -61,20 +72,28 @@ class Calculator extends React.Component { .replace(/x/g, '*') .replace(/-/g, '-') .replace('--', '-'); - let answer = Math.round(1000000000000 * eval(expression)) / 1000000000000; - this.setState({ - currentVal: answer.toString(), - formula: - expression - .replace(/\*/g, '⋅') - .replace(/-/g, '-') - .replace(/(x|\/|\+)-/, '$1-') - .replace(/^-/, '-') + - '=' + - answer, - prevVal: answer, - evaluated: true - }); + try { + let answer = + Math.round(1000000000000 * eval(expression)) / 1000000000000; + this.setState({ + currentVal: answer.toString(), + formula: + expression + .replace(/\*/g, '⋅') + .replace(/-/g, '-') + .replace(/(x|\/|\+)-/, '$1-') + .replace(/^-/, '-') + + '=' + + answer, + prevVal: answer, + evaluated: true + }); + } catch (e) { + this.setState({ + currentVal: 'Invalid Input', + formula: '' + }); + } } }