Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:Regex或其他一些控制只读输入的技术_Javascript_Regex_Calculator - Fatal编程技术网

Javascript:Regex或其他一些控制只读输入的技术

Javascript:Regex或其他一些控制只读输入的技术,javascript,regex,calculator,Javascript,Regex,Calculator,我正在创建类似Windows的计算器。我已经用html构建了我的计算器,并将输入设置为只读,以类似于Windows的输入。现在,我知道您可以通过创建适当的正则表达式来控制基本输入,但是只读的情况是这样的吗 我想要的是,我通过添加事件监听器来控制输入框中的内容,而不是在满足条件时更新输入(我已经这样做了),但是我可以通过使用正则表达式或其他适当的数学算法(如3.55*(4/(1+1))来进一步限制我的代码吗?我希望我清楚我需要什么 我试着设置无数的变量,并用if/switch语句控制它们,最终奏效

我正在创建类似Windows的计算器。我已经用html构建了我的计算器,并将输入设置为只读,以类似于Windows的输入。现在,我知道您可以通过创建适当的正则表达式来控制基本输入,但是只读的情况是这样的吗

我想要的是,我通过添加事件监听器来控制输入框中的内容,而不是在满足条件时更新输入(我已经这样做了),但是我可以通过使用正则表达式或其他适当的数学算法(如3.55*(4/(1+1))来进一步限制我的代码吗?我希望我清楚我需要什么

我试着设置无数的变量,并用if/switch语句控制它们,最终奏效了,但我花了大约100行代码,很快就变成了一场噩梦,所以我从头开始寻找替代方案,如果我对JS的了解是真的,这是可能的。请只使用纯JS,不要使用其他库。以下是我当前的JS代码:

const domRef = {
  inputMain: document.getElementById('input-main'),
  inputSecondary: document.getElementById('input-secondary'),
  buttons: document.getElementById('calculator-basic').querySelectorAll('button')
}

function handleClick(event) {
  let target = event.target;

  if (target.classList.contains('expressions')) { // operands and operators
    let input = target.textContent;
    updateInputMain(input);
  }

}

function handleKeypress(event) {
  let target;
  for (let i = 0; i < domRef.buttons.length; i++) {

    if (domRef.buttons[i].textContent === event.key) {
      target = domRef.buttons[i];
      target.click();
    }

  }
}

function updateInputMain(input) {
  domRef.inputMain.value += input;
}



for (let i = 0; i < domRef.buttons.length; i++) {
  domRef.buttons[i].addEventListener('click', handleClick);
}

document.body.addEventListener('keypress', handleKeypress);
const domRef={
inputMain:document.getElementById('input-main'),
inputSecondary:document.getElementById('input-secondary'),
按钮:document.getElementById('calculator-basic')。querySelectorAll('button'))
}
函数handleClick(事件){
让target=event.target;
if(target.classList.contains('expressions'){//操作数和运算符
让输入=target.textContent;
updateInputMain(输入);
}
}
功能手柄按键(事件){
让目标;
for(设i=0;i
我建议使用专门的库,例如

进行强大的计算变得如此简单:

math.sqrt(-4);//2i
console.log(数学评估(3.55*(4/(1+1)))

我建议使用专门的库,例如

进行强大的计算变得如此简单:

math.sqrt(-4);//2i
console.log(数学评估(3.55*(4/(1+1)))

带有适当平衡括号的公式不是正则语言,因此它们不能用正则表达式解析(有些扩展可能会用到,但我相信它们在标准JS引擎中不可用)。我想你可能是对的,因为我还没有找到任何示例,尽管我已经搜索了好几天了。带适当平衡括号的公式不是一种常规语言,因此它们不能用正则表达式进行解析(有一些扩展是可能的,但我相信它们在标准JS引擎中不可用)。我想你可能是对的,因为我还没有找到任何示例,尽管我已经搜索了好几天了。谢谢你的评论。我意识到我将来必须处理解析问题,math.js可能是解决这个问题的方法,但我想限制只读输入字段以获得“可解析”表达式,这是我使用大量if\else\switch\case语句所做的。我想要的是另一种方法来实现这一点,而不会让我的代码变得如此混乱。以下是我到目前为止的全部代码:感谢您的评论。我意识到我将来必须处理解析问题,math.js可能是解决这个问题的方法,但我想限制只读输入字段以获得“可解析”表达式,这是我使用大量if\else\switch\case语句所做的。我想要的是另一种方法来实现这一点,而不会让我的代码变得如此混乱。以下是我到目前为止的完整代码: