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) {
      let verifyState = null // 验证状态
      if (!str) {
        return this.$Message.error('公式不能为空')
      }
      str = str.replace(/ /g, '') // 去掉空格
         const chinese = /[\u4E00-\u9FA5\uF900-\uFA2D]/ // 汉字
      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)
        }
      }
      // 验证是否存在加减乘除
      if (!str.match(/\*|-|[÷]|[+]/)) {
        verifyState = false
        return
      }
      // 如果公式错误会出现报错信息
      try {
        // 构造函数
        // 执行字符串
        let makeFun = new Function('return ' + str)
        try {
          makeFun()
          verifyState = true
          console.log('语法正确', makeFun())
        } catch (error) {
          verifyState = false
        }
      } catch (errorInfo) {
        verifyState = false
      }
      return verifyState
    },

4、调用

  this.formulaVerify('(特殊值1*数量1+特殊值2*数量2+text3*6)*0.7+特殊值3*数量3')

5、正确公式返回值

6、错误公式返回值

posted on 2022-09-21 11:55  丶凉雨拾忆  阅读(499)  评论(0)    收藏  举报