比较字符串中的两个最后一个字符

时间:2018-04-17 21:25:11

标签: javascript angularjs

我在AngularJS中编写计算器。我被困在验证用户输入上。我不希望用户能够彼此相邻地输入两个2个运算符(' +',' /',' *')。 因此,每次,我都会尝试比较字符串的最后一个字符和倒数第二个字符。但我总觉得我有两个操作员角色。

var app = angular.module("myApp", []);

app.controller("myCtrl", function ($scope) {

  $scope.expression = "";

  var liste = ['+', '/', '*'];

  $scope.add = function (ope) {

    $scope.expression += String(ope);

    var der = $scope.expression[$scope.expression.length - 1];
    var avantDer = $scope.expression[$scope.expression.length - 2];

    if ($scope.expression.length > 3 && liste.includes(der) && liste.includes(avantDer)) {
      alert("error");
    } else {
      $scope.expression += String(ope);
    }
  };
});

2 个答案:

答案 0 :(得分:0)

你非常接近。问题是您在检查表达式是否有效之前将运算符添加到表达式中。最好将现有表达式的最后一个字符和新字符作为单独的变量进行检查。

您还想检查expression的长度是否大于0而不是3,否则用户可以输入两个' +'当长度小于3时,字符会立即出现。



var app = angular.module("myApp", []);

app.controller("myCtrl", function ($scope) {

  $scope.expression = "";

  var liste = ['+', '/', '*'];

  $scope.add = function (ope) {

    // don't add to expression, just store into der
    var der = String(ope);
    var avantDer = $scope.expression[$scope.expression.length - 1];

    if ($scope.expression.length > 0 && liste.includes(der) && liste.includes(avantDer)) {
        alert("error");
    } else {
        $scope.expression += der;
    }
  };
});

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="myCtrl">
  <div>
    <button ng-click="add('+')">+</button>
    <button ng-click="add('*')">*</button>
    <button ng-click="add('/')">/</button>
  </div>
  <div>
    <button ng-click="add('1')">1</button>
    <button ng-click="add('2')">2</button>
    <button ng-click="add('3')">3</button>
  </div>
  {{expression}}
</div>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

有两件事是错的。

  1. $scope.expression.length > 3应该是 $scope.expression.length > 2
  2. 您曾两次致电$scope.expression += String(ope);
  3. 我在下面做了一个小改动,所以我可以在代码片段窗口中运行它。

    我还将减法添加到liste

    var $scope = {
      expression: ""
    };
    
    
    var liste = ['+', '/', '*', '-'];
    
    debugger
    $scope.add = function (ope) {
      var temp = $scope.expression + String(ope);
      console.log(temp);
      var len = temp.length - 1;
    
      if (len > 1) {
        var der = temp[len];
        var avantDer = temp[len - 1];
    
        if (liste.includes(der) && liste.includes(avantDer)) {
          console.log("error");
        } else {
          $scope.expression = temp;
        }
      }
      else {
        $scope.expression = temp;
      }
    };
    
    $scope.add('3');
    $scope.add('+');
    $scope.add('-');

    当我致电$scope.add('-');时,它会显示您所期望的错误。