前端验证数学公式是否符合要求
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 }