element vue 数组型 rule validate

146 篇文章 5 订阅

有没有遇到过数组型验证?我遇到了,贴上解决方法.

下面的效果是周一到周天 有邮箱和电话的验证,因为支持多条数据(空格分隔)

<el-form
        v-loading="loading"
        ref="tableData"
        :model="tableData"
        :rules="rules"
        label-position="right"
        label-width="150px"
      >

        <!-- 周一 -->
        <el-row :gutter="10">
          <el-col :span="2" class="boldClass">
            <el-form-item :label="this.$t('common.mon')">
            </el-form-item>
          </el-col>
          <el-col :span="11">
            <!-- 手机 -->
            <el-form-item
              :label="$t('register.phoneNumber')"
              prop="week1.phoneStr">

              <!-- <span slot="label">
                <i class="el-icon-mobile-phone" style="margin-right:3px"> </i>{{ $t('register.phoneNumber') }}
              </span> -->

              <span> <el-input v-model="tableData.week1.phoneStr" :placeholder="this.$t('alarm.morePhoneTip')"></el-input></span>
            </el-form-item>
          </el-col>
          <el-col :span="11">
            <!-- 邮箱 -->
            <el-form-item :label="$t('register.email')" prop="week1.emailStr">
              <span> <el-input v-model="tableData.week1.emailStr" :placeholder="this.$t('alarm.moreEmailTip')"></el-input></span>
            </el-form-item>
          </el-col>
        </el-row>


        <div class="footer">
          <el-button :loading="subloading" type="primary" style="width:220px;" @click="onSubmit">{{ $t('alarm.submit') }}</el-button>
        </div>

      </el-form>


data() {
    var validateEmailStr = (rule, value, callback) => {
      if (value.replace(/(^\s*)|(\s*$)/g, '') !== '') {
        var emailArr = value.replace(/(^\s*)|(\s*$)/g, '').split(/\s+/)
        emailArr.forEach((item, index) => {
          if (!(/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/).test(item.replace(/(^\s*)|(\s*$)/g, ''))) {
            callback(new Error(this.$t('alarm.emailWrong') + ' ' + item.replace(/(^\s*)|(\s*$)/g, '')))
          }
          if ((index + 1) == emailArr.length) {
            callback()
          }
        })
      } else {
        callback()
      }
    }
    var validatePhoneStr = (rule, value, callback) => {
      if (value.replace(/(^\s*)|(\s*$)/g, '') !== '') {
        var phoneArr = value.replace(/(^\s*)|(\s*$)/g, '').split(/\s+/)
        phoneArr.forEach((item, index) => {
          if (!(/^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/).test(item.replace(/(^\s*)|(\s*$)/g, ''))) {
            callback(new Error(this.$t('alarm.phoneWrong') + ' ' + item.replace(/(^\s*)|(\s*$)/g, '')))
          }
          if ((index + 1) == phoneArr.length) {
            callback()
          }
        })
      } else {
        callback()
      }
    }
    return {
      subloading: false,
      showDialog: false, // 是否弹出dialog
      loading: false,
      rules: {
        'week1.emailStr': { required: false, validator: validateEmailStr, trigger: 'change' },
        'week1.phoneStr': { required: false, validator: validatePhoneStr, trigger: 'change' },
        'week2.emailStr': { required: false, validator: validateEmailStr, trigger: 'change' },
        'week2.phoneStr': [{ required: false, validator: validatePhoneStr, trigger: 'change' }],
        'week3.emailStr': [{ required: false, validator: validateEmailStr, trigger: 'change' }],
        'week3.phoneStr': [{ required: false, validator: validatePhoneStr, trigger: 'change' }],
        'week4.emailStr': [{ required: false, validator: validateEmailStr, trigger: 'change' }],
        'week4.phoneStr': [{ required: false, validator: validatePhoneStr, trigger: 'change' }],
        'week5.emailStr': [{ required: false, validator: validateEmailStr, trigger: 'change' }],
        'week5.phoneStr': [{ required: false, validator: validatePhoneStr, trigger: 'change' }],
        'week6.emailStr': [{ required: false, validator: validateEmailStr, trigger: 'change' }],
        'week6.phoneStr': [{ required: false, validator: validatePhoneStr, trigger: 'change' }],
        'week0.emailStr': [{ required: false, validator: validateEmailStr, trigger: 'change' }],
        'week0.phoneStr': [{ required: false, validator: validatePhoneStr, trigger: 'change' }]
      },
      tableData: {
        identification: undefined,
        week0: {
          phoneStr: '',
          emailStr: '',
          phone: [],
          email: []
        },
        week1: {
          phoneStr: '',
          emailStr: '',
          phone: [],
          email: []
        },
        week2: {
          phoneStr: '',
          emailStr: '',
          phone: [],
          email: []
        },
        week3: {
          phoneStr: '',
          emailStr: '',
          phone: [],
          email: []
        },
        week4: {
          phoneStr: '',
          emailStr: '',
          phone: [],
          email: []
        },
        week5: {
          phoneStr: '',
          emailStr: '',
          phone: [],
          email: []
        },
        week6: {
          phoneStr: '',
          emailStr: '',
          phone: [],
          email: []
        }
      }

    }
  },

以下为效果

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3 中使用 Element Plus 进行表单验证,需要先安装 Element Plus 和 VeeValidateElement Plus 依赖于 VeeValidate)。安装命令如下: ``` npm install element-plus vee-validate@next ``` 安装完成后,可以在 main.js 中引入并注册 Element Plus 和 VeeValidate: ```javascript import { createApp } from 'vue' import ElementPlus from 'element-plus' import 'element-plus/lib/theme-chalk/index.css' import VeeValidatePlugin from './plugins/vee-validate' import App from './App.vue' const app = createApp(App) app.use(ElementPlus) app.use(VeeValidatePlugin) app.mount('#app') ``` VeeValidate 需要在 plugin 中进行注册。可以先创建一个 plugins 文件夹,然后在其中创建一个 vee-validate.js 文件: ```javascript import { defineRule, configure } from 'vee-validate' import { required, email } from '@vee-validate/rules' export default { install: (app) => { // 配置 configure({ generateMessage: ({ field, rule }) => { const messages = { required: `${field}不能为空`, email: `${field}格式不正确` } return messages[rule] } }) // 定义规则 defineRule('required', required) defineRule('email', email) } } ``` 这里定义了两个规则:required 和 email。然后在组件中使用: ```html <template> <el-form :model="form" :rules="rules" ref="form" label-width="100px"> <el-form-item label="邮箱" prop="email"> <el-input v-model="form.email"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm">提交</el-button> </el-form-item> </el-form> </template> <script> import { reactive } from 'vue' import { useVeeValidate } from '@vee-validate/vue3' export default { setup() { const { form, handleSubmit, validate } = useVeeValidate({ initialValues: { email: '' } }) const rules = { email: 'required|email' } const submitForm = () => { validate().then((result) => { if (result.valid) { console.log('提交成功') } }) } return { form, rules, submitForm } } } </script> ``` 这里使用了 VeeValidate 提供的 useVeeValidate hook,它返回了一个 form 对象、handleSubmit 方法和 validate 方法。form 对象包含了表单的所有数据,handleSubmit 方法用于提交表单,validate 方法用于验证表单。rules 对象定义了表单验证规则。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值