前端验证数学公式是否符合要求

  var formulaString=************
  formulaString = formulaString.replace(/\s/g, '')
  if (formulaString === '') {
    this.$message.error('公式不能为空')
    return false
  }
  if (/^[\x\÷\+\-\*\/]/.test(formulaString)) {
    this.$message.error('公式不正确,不能以运算符开始')
    return false
  }
  if (/[\x\÷\+\-\*\/]$/.test(formulaString)) {
    this.$message.error('公式不正确,不能以运算符结束')
    return false
  }
  if (/\(\)/.test(formulaString)) {
    this.$message.error('公式不正确,存在空括号')
    return false
  }
  if (/[\x\÷\+\-\*\/]{2,}/.test(formulaString)) {
    this.$message.error('公式不正确,运算符不能连续')
    return false
  }
  if (/\([\x\÷\+\-\*\/]/.test(formulaString)) {
    this.$message.error('公式不正确,( 的后面不能是运算符')
    return false
  }
  if (/[\x\÷\+\-\*\/]\)/.test(formulaString)) {
    this.$message.error('公式不正确,) 的前面不能是运算符')
    return false
  }
  if (/[^\+\-\*\/]\(/.test(formulaString)) {
    this.$message.error('公式不正确,( 的前面只能是运算符')
    return false
  }
  if (/\)[^\+\-\*\/]/.test(formulaString)) {
    this.$message.error('公式不正确,) 的后面只能是运算符')
    return false
  }
  var stack1 = []
  for (var i = 0, item1; i < formulaString.length; i++) {
    item1 = formulaString.charAt(i)
    if (item1 === '(') {
      stack1.push('(')
    } else if (item1 === ')') {
      if (stack1.length > 0) {
        stack1.pop()
      } else {
        return false
      }
    }
  }
  if (stack1.length !== 0) {
    this.$message.error('公式不正确,() 不匹配')
    return false
  }
  // 另外还要判断数字的个数等于运算符号个数加1
  this.aList = formulaString.match(/[\x\÷\+\-\*\/]/g)  //运算符合的个数
  
  const singleList = formulaString.split(/[\x\÷\+\-\*\/]/g)
  const reg = /^[0-9]+.?[0-9]*$/
  const writeNum = [] // 数字的个数
  singleList.forEach(el => {
    if (reg.test(el)) {
      writeNum.push(el)
    }
  })
  if (this.aList.length + 1 !==  writeNum.length) {
    this.$message.error('公式不正确')
    return false
  }

 

posted @ 2021-04-19 10:47  mark224  阅读(493)  评论(0编辑  收藏  举报