zoukankan      html  css  js  c++  java
  • 前端验证数学公式是否符合要求

      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
      }
  • 相关阅读:
    bzoj 3930: [CQOI2015]选数
    bzoj 2301: [HAOI2011]Problem b
    HDU 1695 GCD
    2017ACM/ICPC广西邀请赛-重现赛 1007.Duizi and Shunzi
    2017ACM/ICPC广西邀请赛-重现赛 1010.Query on A Tree
    2017ACM/ICPC广西邀请赛-重现赛 1004.Covering
    P3501 [POI2010]ANT-Antisymmetry
    P1171 售货员的难题
    P3385 【模板】负环
    P1659 [国家集训队]拉拉队排练
  • 原文地址:https://www.cnblogs.com/mark21/p/14675885.html
Copyright © 2011-2022 走看看