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

  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
  }
原文地址:https://www.cnblogs.com/mark21/p/14675885.html