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

500 阅读1分钟

在工作中,遇到这研究过一个需求,前后端都需要进行数学公式校验,查了许多资料,都不是太严谨,针对该项目做了一些校验规则,大概率可复用,发出来望大家批评指正,谢谢!

具体代码如下:


  var formularTextString=************
  formularTextString = formularText.replace(/\s/g, '');
  
      if (formular.includes('')) {
        message.error('当前公式不成立,请检查!')
        return false
      }
      if (formular.includes(undefined)) {
        message.error('当前公式不成立,请检查!')
        return false
      }
      if (formularTextString === 'only_One') {
        message.error('当前公式不成立,请检查!')
        return false
      }
      if (formularTextString === '(only_One)') {
        message.error('当前公式不成立,请检查!')
        return false
      }
      if (/^[\+\-\*\/]/.test(formularTextString)) {
        message.error('公式不正确,不能以运算符开始')
        return false
      }
      if (/\(\)/.test(formularTextString)) {
        message.error('公式不正确,存在空括号')
        return false
      }
      if (/[\+\-\*\/]{2,}/.test(formularTextString)) {
        message.error('公式不正确,运算符不能连续')
        return false
      }
      let stack1 = [];
      for (var i = 0, item1; i < formularTextString.length; i++) {
        item1 = formularTextString.charAt(i)
        if (item1 === '(') {
          stack1.push('(')
        } else if (item1 === ')') {
          if (stack1.length > 0) {
            stack1.pop()
          } else {
            message.error('公式不正确,"()" 缺失')
            return false
          }
        }
      }
      if (stack1.length !== 0) {
        message.error('公式不正确,"()" 缺失')
        return false
      }
      if (/\([\+\-\*\/]/.test(formularTextString)) {
        message.error('公式不正确,"(" 的右侧不能是运算符')
        return false
      }
      if (/[\+\-\*\/]\)/.test(formularTextString)) {
        message.error('公式不正确,")" 的左侧不能是运算符')
        return false
      }
      if (/[^\+\-\*\/\(]\(/.test(formularTextString)) {
        message.error('公式不正确,"(" 的左侧不能是参数')
        return false
      }
      if (/\)[^\+\-\*\/\)]/.test(formularTextString)) {
        message.error('公式不正确,")" 的右侧不能是参数')
        return false
      }