JS 验证自定义计算公式是否成功

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

4、方法

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

5、调用

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

6、正确公式返回值

在这里插入图片描述

7、错误公式返回值

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值