求element表单校验formula数学公式的写法?

有个需求,表单验证输入框内的公式是否满足四则运算公式的正确写法,像是(R(n1)+R(n2))*R(n3),R()格式代表变量,请问这个表单校验怎么写?

阅读 1.6k
1 个回答
<el-form
    ref="ruleFormRef"
    :model="ruleForm"
    status-icon
    :rules="rules"
    label-width="120px"
    class="demo-ruleForm">
    <el-form-item label="公式" prop="formula">
      <el-input v-model="ruleForm.formula" />
    </el-form-item>
</el-form>
<script lang="ts" setup>
    import { reactive } from 'vue'

    const validateFormula = (rule: any, value: any, callback: any) => {
    if (!value) {
      callback(new Error('请输入公式'))
    } else {
      try {
        value = value.replace(/ /g,'')
        if( /^[\d|\-|\+|\*|\/|\.|\(|\)]+$/.test(value)) {
            //解决连续的运算符
            if(/[\-|\+|\*|\/]{2,}/.test(value)) {
                return callback(new Error('输入公式有误'))
            }
            if(/\D\./.test(value)) { //解决 0.x 简写成 .x情况
               return callback(new Error('输入公式有误'))
            }
            let val = eval(value)
            if(typeof val == 'number' && val != Infinity) {
              return callback()
            }
            return callback(new Error('输入公式有误'))
        } else {
            callback(new Error('输入公式有误'))
        }
      } catch(err) {
        callback(new Error('输入公式有误'))
      }
    }
  }

    const ruleForm = reactive({
      formula: ''
    })
    const rules = reactive({
      formula: [{ validator: validateFormula, trigger: 'blur' }]
    })
</srcipt>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题