如果我的 html/javascript/css 计算器上的数字不兼容,我该如何添加 "Syntax Error"?

How do I add "Syntax Error" if the numbers aren't compatible on my html/javascript/css calculator?

所以,我想这样做,如果出于某种原因,人们 mistyped/misclicked 我的计算器上有东西,它会显示语法错误。但是,我不知道该怎么做。

我所说的“打错”是指某人可能不小心写了类似这样的内容:

10 + / 10

当他们真正想写 10 + 10 时。

目前,我的计算器只有在出现错误时才会显示输入的方程式,而不会执行其他任何操作。我只是为了效率的缘故添加功能。

function dis(val) {
  document.getElementById("result").value += val
}

function solve() {

  let x = document.getElementById("result").value
  let y = eval(x)
  document.getElementById("result").value = y
}

function clr() {
  document.getElementById("result").value = " "
}
.title {
  margin-bottom: 10px;
  text-align: center;
  width: 100%;
  color: Black;
  border: solid gray 2px;
  font-size: 30px
}

input[type="button"] {
  background-color: gray;
  color: black;
  border: solid black 2px;
  width: 100%;
  font-size: 30px
}

input[type="button"]:hover {
  background-color: #D3D3D3;
  cursor: pointer;
}

input[type="text"] {
  background-color: white;
  border: solid black 2px;
  width: 100%;
  font-size: 30px
}
<div class=t itle>Calculator</div>
<table border="10" style="width:100%;">
  <tr>
    <td colspan="3"><input type="text" id="result" /></td>
  </tr>
  <tr>
    <td><input type="button" value="1" onclick="dis('1')" /> </td>
    <td><input type="button" value="2" onclick="dis('2')" /> </td>
    <td><input type="button" value="3" onclick="dis('3')" /> </td>
    <td><input type="button" value="/" onclick="dis('&nbsp;/&nbsp;')" /> </td>
    <td><input type="button" value="c" onclick="clr()" /> </td>
  </tr>
  <tr>
    <td><input type="button" value="4" onclick="dis('4')" /> </td>
    <td><input type="button" value="5" onclick="dis('5')" /> </td>
    <td><input type="button" value="6" onclick="dis('6')" /> </td>
    <td><input type="button" value="(" onclick="dis('(')" /> </td>
    <td><input type="button" value=")" onclick="dis(')')" /> </td>
    </td>
  </tr>
  <tr>
    <td><input type="button" value="7" onclick="dis('7')" /> </td>
    <td><input type="button" value="8" onclick="dis('8')" /> </td>
    <td><input type="button" value="9" onclick="dis('9')" /> </td>
    <td><input type="button" value="+" onclick="dis('&nbsp;+&nbsp;')" /> </td>
    <td><input type="button" value="-" onclick="dis('&nbsp;-&nbsp;')" />
  </tr>
  <tr>
    <td><input type="button" value="." onclick="dis('.')" /> </td>
    <td><input type="button" value="0" onclick="dis('0')" /> </td>
    <td><input type="button" value="=" onclick="solve()" /> </td>
    <td><input type="button" value="×" onclick="dis('&nbsp*&nbsp;')" /> </td>
    <td><input type="button" value="π" onclick="dis('3.1415926535')"></td>
  </tr>
</table>

您可以检测 REGEX 是否存在语法错误,例如检测无效的数学表达式。您还可以将 eval 包装在 try catch 块中,因为无效的表达式会引发错误。

示例使用 try/catch

function solve()
{
  let x = document.getElementById("result").value
  let y;
  try {
    y = eval(x)
  } catch (error) {
    alert("Syntax error");
    return;
  }

  document.getElementById("result").value = y 
}

然后要提醒用户,您可以使用 alert function 来提醒用户或在 div 中显示文本,方法与您设置结果的方式相同。存在语法错误。

不过我认为您的计算器存在一些基本问题。我认为从一开始就阻止用户做出无效的表达会更合适。