当前位置:首页 > VUE

vue 实现表单验证

2026-01-19 04:15:10VUE

使用 Vue 内置验证指令

Vue 提供了一些内置指令用于表单验证,例如 v-modelv-bind。结合 HTML5 的表单验证属性,可以快速实现基础验证。

<template>
  <form @submit.prevent="handleSubmit">
    <input 
      v-model="email" 
      type="email" 
      required 
      placeholder="请输入邮箱"
    >
    <span v-if="!email && isSubmitted">邮箱不能为空</span>

    <input 
      v-model="password" 
      type="password" 
      required 
      minlength="6"
      placeholder="请输入密码"
    >
    <span v-if="password.length < 6 && isSubmitted">密码至少6位</span>

    <button type="submit">提交</button>
  </form>
</template>

<script>
export default {
  data() {
    return {
      email: '',
      password: '',
      isSubmitted: false
    }
  },
  methods: {
    handleSubmit() {
      this.isSubmitted = true
      if (this.email && this.password.length >= 6) {
        // 验证通过逻辑
      }
    }
  }
}
</script>

使用 VeeValidate 插件

VeeValidate 是 Vue 生态中流行的表单验证库,提供更丰富的验证规则和错误提示功能。

安装 VeeValidate:

npm install vee-validate

基础使用示例:

<template>
  <Form @submit="handleSubmit" v-slot="{ errors }">
    <Field 
      name="email" 
      type="email" 
      rules="required|email" 
      v-model="email"
    />
    <span>{{ errors.email }}</span>

    <Field 
      name="password" 
      type="password" 
      rules="required|min:6" 
      v-model="password"
    />
    <span>{{ errors.password }}</span>

    <button type="submit">提交</button>
  </Form>
</template>

<script>
import { Form, Field } from 'vee-validate'

export default {
  components: {
    Form,
    Field
  },
  data() {
    return {
      email: '',
      password: ''
    }
  },
  methods: {
    handleSubmit(values) {
      console.log('提交数据:', values)
    }
  }
}
</script>

自定义验证规则

在 VeeValidate 中可以扩展自定义验证规则:

import { defineRule } from 'vee-validate'

defineRule('phone', value => {
  if (!value) return '手机号不能为空'
  const regex = /^1[3-9]\d{9}$/
  if (!regex.test(value)) return '手机号格式不正确'
  return true
})

// 使用自定义规则
<Field name="mobile" rules="required|phone" v-model="mobile" />

异步验证实现

对于需要后端验证的字段(如用户名是否已存在),可以使用异步验证:

defineRule('uniqueUsername', async (value) => {
  if (!value) return true
  const exists = await checkUsernameExists(value) // 假设的API调用
  return exists ? '用户名已存在' : true
})

<Field name="username" rules="required|uniqueUsername" v-model="username" />

表单整体验证状态

获取整个表单的验证状态,控制提交按钮等交互:

<Form v-slot="{ meta, isSubmitting }">
  <!-- 表单字段 -->
  <button type="submit" :disabled="!meta.valid || isSubmitting">
    {{ isSubmitting ? '提交中...' : '提交' }}
  </button>
</Form>

验证样式处理

根据验证状态动态调整样式,提升用户体验:

input.valid {
  border-color: green;
}
input.invalid {
  border-color: red;
}
<Field name="email" v-slot="{ field, meta }">
  <input 
    v-bind="field" 
    :class="{ 'valid': meta.valid, 'invalid': meta.touched && !meta.valid }"
  >
</Field>

复杂表单验证策略

对于多步骤表单或复杂验证逻辑,可以采用策略模式:

vue 实现表单验证

const validationSchema = {
  email: 'required|email',
  password: 'required|min:6',
  confirmPassword: 'required|confirmed:@password'
}

<Form :validation-schema="validationSchema">
  <!-- 表单内容 -->
</Form>

标签: 表单vue
分享给朋友:

相关文章

vue实现适老化样式

vue实现适老化样式

Vue 实现适老化样式的关键方法 全局字体与字号调整 通过 CSS 变量或主题配置统一放大基础字号,建议正文不小于 18px,标题更大。在 App.vue 中设置全局样式: :root { --…

vue的艾特功能实现

vue的艾特功能实现

Vue 的 @ 功能实现 在 Vue 中实现类似社交平台的 @ 功能,通常涉及输入框的监听、用户匹配和选择插入。以下是具体实现方法: 监听输入框内容 使用 v-model 绑定输入框内容,并通过 @…

vue实现管道

vue实现管道

Vue 中实现管道(Pipe)功能 在 Vue 中可以通过过滤器(Filters)或计算属性(Computed Properties)实现类似管道的功能,将数据经过多个处理步骤后输出。 使用过滤器(…

vue实现遮罩

vue实现遮罩

Vue 实现遮罩层的方法 在 Vue 中实现遮罩层可以通过多种方式完成,以下是几种常见的方法: 方法一:使用 v-show 或 v-if 控制显示 通过 Vue 的指令动态控制遮罩层的显示与隐藏。…

vue轮询实现

vue轮询实现

Vue 轮询实现方法 在 Vue 中实现轮询可以通过以下几种方式: 使用 setInterval data() { return { pollInterval: null } },…

vue 实现长按

vue 实现长按

实现长按功能的基本思路 在Vue中实现长按功能,通常需要监听元素的mousedown或touchstart事件,启动一个计时器。当用户按住元素超过设定的时间阈值时,触发长按回调函数。如果在时间阈值内触…