防止算术运算符立即跟随另一个

时间:2015-06-15 12:53:26

标签: javascript jquery

我写了一个计算器脚本,目前允许我输入无效的输入值,如5 ***** 5。这样的输入(其中一个算术运算符如*+等紧接着另一个)应该受到限制,因为它们毫无意义。如何修改我的代码以限制此类输入?

function c(val) {
  var1 = $("#bar").val(val);
}

function v(val) {
  var2 = $("#bar").val($("#bar").val() + val);
}

function equal() {
  var3 = c(eval($("#bar").val()));
}

function reset() {
  var4 = $("#bar").val("");
}

$(document).ready(function() {
  $("#backspace").click(function() {
    var barValue = $("#bar").val();
    $("#bar").val(barValue.substring(0, barValue.length - 1));
  });
});
<p>
  <input type="text" id="bar" size="15" readonly>
  <input type="button" value="C" onclick="reset('')">
</p>
<p>
  <input type="button" value="←" id="backspace">
  <input type="button" value="­" onclick="">
  <input type="button" value="­" onclick="">
  <input type="button" value="­" onclick="">
  <input type="button" value="­" onclick="">
</p>
<p>
  <input type="button" value="7" onclick="v('7')">
  <input type="button" value="8" onclick="v('8')">
  <input type="button" value="9" onclick="v('9')">
  <input type="button" value="/" onclick="v('/')">
  <input type="button" value="­" onclick="">
</p>
<p>
  <input type="button" value="4" onclick="v('4')">
  <input type="button" value="5" onclick="v('5')">
  <input type="button" value="6" onclick="v('6')">
  <input type="button" value="*" onclick="v('*')">
  <input type="button" value="­" onclick="">
</p>
<p>
  <input type="button" value="1" onclick="v('1')">
  <input type="button" value="2" onclick="v('2')">
  <input type="button" value="3" onclick="v('3')">
  <input type="button" value="-" onclick="v('-')">
  <input type="button" value="­" onclick="">
</p>
<p>
  <input type="button" value="0" onclick="v('0')">
  <input type="button" value="." onclick="v('.')">
  <input type="button" value="+" onclick="v('+')">
  <input type="button" value="=" onclick="equal()" id="equal">
  <input type="button" value="­" onclick="">
</p>
<div id="history"></div>

这是完整来源的 JSFiddle Link

1 个答案:

答案 0 :(得分:0)

使用正则表达式。测试以查看最后一个值是+, - ,*还是/

如果lastChar符合此条件,则传递的值不会执行任何操作。

function v(val) {
    var patt = /\+|\-|\*|\//
    var barValue = $("#bar").val();
    var lastChar = barValue.substring(barValue.length, barValue.length - 1);
    if (patt.test(lastChar) && patt.test(val)) {
        //do nothing as current val and lastChar are mathematical characters
    } else {
        //update the formula
        var2 = $("#bar").val($("#bar").val() + val);
    }
}