为什么.test()函数对onclick行为不可靠?

时间:2018-02-09 14:43:23

标签: javascript regex

我正在构建一个vanilla JS计算器并尝试使用正则表达式.test()函数来限制用户连续多次使用运算符

  

即。 2 ++++ 3

它的结构为if else语句,问题是正则表达式测试第一次起作用,但第二次失败,导致代码在不应该跳转到else语句时。我的正则表达式错了吗?我使用错误的函数来运行比较吗?

var testOperands = /[+-/*=]/g;
switch (x) {

  case "+":
    if(testOperands.test(currentEntry[0])){
      currentArea.textcontent = x;
      totalArea.textContent = totalArea.textContent + "";
    } else {
    currentArea.textContent = x;
    totalArea.textContent = (totalArea.textContent + x);
    currentEntry = ["+"];
    totalEntry.push(x);
    }
    break;
  case "-":
    if(currentEntry[0] === "-"){
      currentArea.textcontent = x;
    } else {
    currentArea.textContent = x;
    totalArea.textContent = (totalArea.textContent + x);
    currentEntry = ["-"];
    totalEntry.push(x);
    }
    break;

这是完整的代码:https://codepen.io/brianofblades/pen/KQWVYN

3 个答案:

答案 0 :(得分:2)

您的正则表达式无效,-需要转义:[+\-\/*=]

答案 1 :(得分:0)

/^[+\-%*]?$/g

随意在方括号中添加更多符号,但此正则表达式检查任何这些字符中的0或1 ...任何超过1且测试将不会通过...

let reg = /^[+\-%*]?$/g

console.log(reg.test('+')) //true
console.log(reg.test('++')) //false

使用此正则表达式检查多个运算符IN-BETWEEN数字或任何长度。

let reg = /^([0-9]+[+\-%*]?[0-9]+)$/g

console.log(reg.test('123+123')) //true
console.log(reg.test('123++123')) //false

答案 2 :(得分:0)

正则表达式[-+\/*=]{2,}

function myFunction() {
  console.clear()
  var s = document.getElementById("input").value;
  console.log(/[-+\/*=]{2,}/.test(s));
}
<form action="javascript:myFunction()">
  <input id="input" type="text" name="math" value="2++3"><br><br>
  <input type="submit" value="Submit">
</form>