首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Javascript:正则表达式或其他一些控制只读输入的技术

Javascript:正则表达式或其他一些控制只读输入的技术
EN

Stack Overflow用户
提问于 2018-06-14 23:59:56
回答 1查看 110关注 0票数 0

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

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

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

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

发布于 2018-06-16 04:58:06

我建议使用专用库,例如Math.js

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

代码语言:javascript
复制
math.sqrt(-4); // 2i
console.log(math.eval(3.55*(4/(1+1))));
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/4.4.2/math.min.js"></script>

Math.js包含一个函数math.parse,用于将表达式解析到表达式树中。这应该会很方便。

此外,我们可以使用try-catch块包装parse或eval,以检查语法错误:

代码语言:javascript
复制
try {
  math.parse('3.55*(4/(1+1)');
}
catch(error) {
  console.error(error);
}
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/4.4.2/math.min.js"></script>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50861624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档