正则表达式+类似栈:校验四则运算是否合法

在rules中添加校验规则:
 complexConfig: [
          {
            validator: (rule, value, callback) => {
              const pushS = ['(', '['];
              const popS = [')', ']'];
              let sum = 0
              value.split("").find((item) => {
                if (pushS.indexOf(item) !== -1) {
                  this.push();//入栈
                  if (this.top < 0) {
                    callback(new Error('配置不合法!'));
                  }
                }
                if (popS.indexOf(item) !== -1) {
                  this.pop();//出栈
                  if (this.top < 0) {
                    callback(new Error('配置不合法!'));
                  }
                }
                sum++;
              })
              if (sum == value.split("").length) {
                if (this.top != 0) {//遍历结束栈中不为空,则括号匹配失败
                  callback(new Error('配置不合法!'));
                }
              }
             //对计算式进行规则校验,先去除括号
              var res = value.replace(/\(/g, "").replace(/\)/g, "");
              var reg = /^(([a-zA-Z0-9]+[-+*/])*[a-zA-Z0-9]+([-+*/][a-zA-Z0-9]+)*)$/;
              if (res !== '') {
                if (!reg.test(res)) {
                  callback(new Error('配置不合法!'));
                }
              }
              callback();
            },
            trigger: "blur"
          }
        ],
在data中定义以下参数:
dataStore: [],
top: 0
在methods中添加如下方法:
    push(element) { // 进栈
      this.dataStore[this.top++] = element;
    },
    pop() { // 出栈
      return this.dataStore[--this.top];
    },

你可能感兴趣的:(正则表达式+类似栈:校验四则运算是否合法)