vue3表单验证

该代码段展示了在Vue3中使用模板语法创建一个包含商品信息的表单,并进行了详细的验证规则设置,包括必填项、数字格式和自定义验证方法,确保原始价格小于当前价格和VIP价格。在JS部分,定义了表单数据、验证规则以及验证回调函数,用于确认和提交表单。
摘要由CSDN通过智能技术生成
  1. 在html中

<template>
  <el-form :model="form" ref="ruleFormRef" :rules="rules">
    <!-- 商品名称 -->
    <el-form-item label="商品名称" label-width="100px" prop="title">
      <el-input v-model.trim="form.title" autocomplete="off" />
    </el-form-item>
    <!-- 原始价格 -->
    <el-form-item label="原始价格" label-width="100px" prop="originalPrice">
      <el-input v-model="form.originalPrice" autocomplete="off">
        <template #append>元</template>
      </el-input>
    </el-form-item>
    <!-- 当前价格 -->
    <el-form-item label="当前价格" label-width="100px" prop="price">
      <el-input v-model="form.price" autocomplete="off">
        <template #append>元</template>
      </el-input>
    </el-form-item>
    <!-- VIP价格 -->
    <el-form-item label="VIP价格" label-width="100px" prop="vipPrice">
      <el-input v-model="form.vipPrice" autocomplete="off">
        <template #append>元</template>
      </el-input>
    </el-form-item>
  </el-form>
  <!-- 确定 -->
  <div style="width: 100%;text-align: right;margin-top: 20px;">
    <el-button type="primary" @click="confirm(ruleFormRef)">保存商品</el-button>
  </div>
</template>

说明::rules="rules"是绑定的验证规则,一定要绑定。prop="title"是需要验证的值,一定要对应输入框中绑定的值,如v-model.trim="form.title"

  1. 在js中

<script setup lang="ts">
// 获取虚拟节点
const ruleFormRef = ref<FormInstance>()

// 表单验证
let form = ref({
  title: '',
  originalPrice: undefined,
  price: undefined,
  vipPrice: undefined
})
//验证规则
const rules = reactive({
  title: [
    { required: true, message: '商品名称不能为空', trigger: 'blur' },
  ],
  originalPrice: [
    { validator: originalPrice, trigger: 'blur' },
    // { required: true, message: '原始价格不能为空', trigger: 'blur' },
    { required: true, pattern: /^(\d+.?)?\d{0,2}$/, message: '请输入数字或者2位的小数' }
  ],
  price: [
    { validator: price, trigger: 'blur' },
    // { required: true, message: '价格不能为空', trigger: 'blur' },
    { required: true, pattern: /^(\d+.?)?\d{0,2}$/, message: '请输入数字或者2位的小数' }
  ],
  vipPrice: [
    { validator: vipPrice, trigger: 'blur' },
    // { required: true, message: 'VIP价格为空', trigger: 'blur' },
    { required: true, pattern: /^(\d+.?)?\d{0,2}$/, message: '请输入数字或者2位的小数' }
  ]
})

//追加的验证规则
const originalPrice = (rule: string, value: string, callback: Function) => {//密码验证
  if (Number(value) <= Number(form.value.price) || Number(value) <= Number(form.value.vipPrice) || Number(form.value.price) <= Number(form.value.vipPrice)) {
    callback(new Error('原始价格>当前价格>vip价格'))
  }
  callback()
}
const price = (rule: string, value: string, callback: Function) => {//密码验证
  if (Number(form.value.originalPrice) <= Number(value) || Number(value) <= Number(form.value.vipPrice)) {
    callback(new Error('原始价格>当前价格>vip价格'))
  }
  callback()
}
const vipPrice = (rule: string, value: string, callback: Function) => {//密码验证
  if (Number(form.value.originalPrice) <= Number(value) || Number(form.value.price) <= Number(value)) {
    callback(new Error('原始价格>当前价格>vip价格'))
  }
  callback()
}
const checkUnit = (rule: string, value: number | string, callback: Function) => {
  if (!value) {
    callback(new Error('此处不能为空'))
  } else if (form.value.unit != "件" && form.value.unit != "个" && form.value.unit != "盒") {
    callback(new Error('请输入正确的单位!'))
  } else {
    callback()
  }
}
// 确认修改/添加
const confirm = (formEl: FormInstance | undefined) => {
  if (!formEl) return
  formEl.validate((valid) => {
    if (valid) {
      console.log(form.value, "form");
    }
  })
}
</script>

说明:验证规则rules中,required是是否在页面中显示“*”标记(是否为必填项);message是提示消息;trigger是触发验证的形式,如点击触发、焦点失去触发、change触发等等;validator是绑定追加验证的方法;pattern是正则表达式验证

Vue 3 中可以使用 VeeValidate 4.x 来进行表单验证。以下是简单的使用步骤: 1. 安装 VeeValidate 4.x: ```bash npm install vee-validate@next ``` 2. 在 main.js 中引入和使用 VeeValidate: ```javascript import { createApp } from 'vue' import { createRouter, createWebHistory } from 'vue-router' import App from './App.vue' import { defineRule, configure } from 'vee-validate' import { required, email } from '@vee-validate/rules' import { Field, Form, ErrorMessage } from 'vee-validate' defineRule('required', required) defineRule('email', email) configure({ generateMessage: ({ field, rule }) => { const messages = { required: `${field} is required`, email: `${field} must be a valid email` } return messages[rule] } }) const app = createApp(App) const router = createRouter({ history: createWebHistory(), routes: [] }) app.use(router) app.component('Form', Form) app.component('Field', Field) app.component('ErrorMessage', ErrorMessage) app.mount('#app') ``` 3. 在需要验证的表单中使用 `<Form>` 和 `<Field>` 组件: ```html <template> <Form @submit.prevent="submit"> <Field name="email" label="Email" type="email" rules="required|email" v-model="form.email" /> <ErrorMessage name="email" /> <Field name="password" label="Password" type="password" rules="required" v-model="form.password" /> <ErrorMessage name="password" /> <button type="submit">Submit</button> </Form> </template> ``` 在上面的代码中,`<Field>` 组件的 `name` 属性必须和 `v-model` 绑定的表单数据字段名相同,`rules` 属性中可以使用多个规则,用 `|` 分隔。 4. 在组件中定义表单数据和提交方法: ```javascript import { ref } from 'vue' export default { setup() { const form = ref({ email: '', password: '' }) const submit = () => { console.log('Form submitted:', form.value) } return { form, submit } } } ``` 以上是一个简单的 Vue 3 表单验证实现方法,具体可以根据实际需求进行调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值