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