1、需求
1.项目需求表单中填写公式传入后台。
2.公式中可以使用汉字英文。
3.验证公式是否成功。
2、思路
1.表单中输入公式存入后台是以字符串的形式传入。
2.循环字符串找出字符串中的汉字和英文并替换成数字1
3.替换成功后并进行计算,如果计算验证成功,代表公式验证成功,反之则验证失败。
3、举例
1.表单输入公式
(特殊值1*数量1+特殊值2*数量2+text3*6)*0.7+特殊值3*数量3
2、替换后
(1111*111+1112*112+11113*6)*0.7+1113*113
3、方法
// 公式验证
formulaVerify(str) {
if (!str) {
return this.$Message.error('公式不能为空')
}
str = str.replace(/ /g, '') // 去掉空格
let verifyState = null // 验证状态
const chinese = new RegExp('[\\u4E00-\\u9FFF]+', 'g') // 汉字
const english = new RegExp('[A-Za-z]+') // 字母
/*
1、forEach 不能遍历字符串
2、for循环找出字符串中的汉字与字母
*/
for (let i = 0; i < str.length; i++) {
if (chinese.test(str[i]) || english.test(str[i])) {
// 找出汉字与字母并替换成 数字 1
str = str.replaceAll(str[i], 1)
}
}
console.log(str)
// 如果公式错误会出现报错信息
try {
// 构造函数
// 执行字符串
let makeFun = new Function('return ' + str)
try {
makeFun()
verifyState = true
console.log('语法正确', makeFun())
} catch (error) {
verifyState = false
console.error('语法错误', error)
}
} catch (errorInfo) {
verifyState = false
console.error('语法错误', errorInfo)
}
return verifyState
},
4、调用
this.formulaVerify('(特殊值1*数量1+特殊值2*数量2+text3*6)*0.7+特殊值3*数量3')