JavaScript - 在一个文本框中添加两个数字(仍为字符串)

时间:2017-12-08 17:53:28

标签: javascript node.js bots

由于某种原因,我目前正在制作机器人,我想添加一个命令,当某些用户键入<command> 1 + 2和机器人将回答3时,它会进行数学运算。如果是<command> 2 * 3,则会回复6。 (在这种情况下,我们只使用文本框,如果我在文本框中键入1 + 2,则显示“3”的警报。)

我的问题是,是否有可能通过任何机会发出这种命令? 如果是这样,我想知道如何。因为我已经学习了一些关于JavaScript RegEx的知识,我认为如果我使用它,它就会成功。

感谢高级人员

3 个答案:

答案 0 :(得分:1)

你可以做很多事情。您可以eval输入,但如果您想让其他人使用它,那就不好了(因为它会执行任何有效的JavaScript)。

我认为最好的方法是为每个动作制作一个命令。例如:

add 2 2 // 4
sub 2 2 // 0
mul 2 2 // 4
div 2 2 // 1

这是一个运行add命令的函数,你可以为sub,div和mul添加switch case。

function run(input) {
    input = input.split(" ");
    switch (input[0]) {
        case "add":
            return parseInt(input[1]) + parseInt(input[2]);
            break;
     }
}

如果您不想以这种方式制作机器人,那么它就会变得非常复杂。你要么必须评估输入,要么首先确认输入不是坏事。或者你可以构建自己的表达式解析器,这也很难。

答案 1 :(得分:1)

这是一个快速示例,在单击按钮时从文本框中选取表达式,然后执行计算。它使用正则表达式来分隔数字/运算符,并使用switch来测试运算符的情况。非常简单。

&#13;
&#13;
const input = document.querySelector('input');
const button = document.querySelector('button');
button.addEventListener('click', handleClick, false);

function handleClick() {
  const txt = input.value;
  const expr = txt.match(/(\d+)\s?([\+\-\*\/])\s?(\d+)/);
  const first = Number(expr[1]);
  const operator = expr[2];
  const second = Number(expr[3]);
  switch (operator) {
    case '+':
      console.log(first + second);
      break;
    case '-':
      console.log(first - second);
      break;
    case '*':
      console.log(first * second);
      break;
    case '/':
      console.log(first / second);
      break;
  }
}
&#13;
<input/><button>Submit</button>
&#13;
&#13;
&#13;

答案 2 :(得分:-2)

您可以尝试使用eval功能