当前位置:首页 > VUE

vue表单验证如何实现

2026-01-22 06:02:22VUE

使用 Vue 内置验证(v-model + 手动检查)

通过 v-model 绑定表单数据,在提交时手动检查字段有效性。适用于简单场景。

<template>
  <form @submit.prevent="handleSubmit">
    <input v-model="form.email" type="email" placeholder="Email">
    <span v-if="error.email">{{ error.email }}</span>
    <button type="submit">Submit</button>
  </form>
</template>

<script>
export default {
  data() {
    return {
      form: { email: '' },
      error: {}
    }
  },
  methods: {
    handleSubmit() {
      this.error = {}
      if (!this.form.email.includes('@')) {
        this.error.email = 'Invalid email format'
        return
      }
      // 提交逻辑
    }
  }
}
</script>

使用 VeeValidate 插件

VeeValidate 提供声明式验证规则和错误提示功能,适合复杂表单场景。

vue表单验证如何实现

<template>
  <Form @submit="handleSubmit">
    <Field name="email" rules="required|email" v-model="form.email" />
    <ErrorMessage name="email" />
    <button type="submit">Submit</button>
  </Form>
</template>

<script>
import { Form, Field, ErrorMessage } from 'vee-validate'
export default {
  components: { Form, Field, ErrorMessage },
  data() {
    return { form: { email: '' } }
  },
  methods: {
    handleSubmit(values) {
      console.log(values) // 已验证的数据
    }
  }
}
</script>

组合式 API 实现验证

通过 ref 和计算属性实现响应式验证,适合 Vue 3 项目。

<template>
  <input v-model="email" @blur="validateEmail">
  <span v-if="emailError">{{ emailError }}</span>
</template>

<script setup>
import { ref, computed } from 'vue'
const email = ref('')
const emailError = ref('')

const validateEmail = () => {
  emailError.value = email.value.includes('@') ? '' : 'Invalid email'
}
</script>

自定义验证指令

创建全局指令实现复用验证逻辑,适合需要统一验证风格的场景。

vue表单验证如何实现

// main.js
app.directive('validate-email', {
  mounted(el, binding) {
    el.addEventListener('blur', () => {
      const isValid = el.value.includes('@')
      if (!isValid) {
        el.style.borderColor = 'red'
      }
    })
  }
})
<input v-validate-email v-model="email">

服务端验证结合

前端验证通过后仍需调用 API 进行最终验证,处理用户名重复等业务规则。

methods: {
  async submitForm() {
    try {
      const res = await axios.post('/api/validate', this.form)
      // 处理成功响应
    } catch (error) {
      if (error.response.status === 422) {
        this.errors = error.response.data.errors
      }
    }
  }
}

关键点:

  • 实时验证使用 @inputwatch
  • 提交前验证使用 @submit.prevent
  • 复杂规则建议使用验证库如 VeeValidate 或 async-validator
  • 密码强度等特殊验证需自定义正则表达式

分享给朋友:

相关文章

vue表单实现搜索

vue表单实现搜索

实现 Vue 表单搜索功能 基础表单绑定 在 Vue 中通过 v-model 实现表单输入与数据的双向绑定,搜索框通常绑定一个字符串类型的数据。 <template> <inp…

js双击事件如何实现

js双击事件如何实现

实现双击事件的方法 在JavaScript中,可以通过监听dblclick事件或手动检测两次点击的时间间隔来实现双击事件。以下是几种常见的方法: 使用原生dblclick事件 element.add…

jquery 表单

jquery 表单

jQuery 表单操作 使用 jQuery 操作表单可以简化 DOM 操作,提高开发效率。以下是一些常见的表单操作方法: 获取表单元素的值 使用 val() 方法可以获取或设置表单元素的值。 //…

vue如何实现拖动

vue如何实现拖动

Vue 实现拖动的常用方法 使用 HTML5 原生拖放 API HTML5 提供了原生的拖放 API,可以通过 draggable 属性和相关事件实现拖动功能。 <template>…

css 制作表单

css 制作表单

使用CSS制作表单的基本方法 创建表单时,HTML负责结构,CSS负责样式。表单元素包括输入框、按钮、下拉菜单等,通过CSS可以统一风格并提升用户体验。 HTML结构示例 <form cla…

css制作表单

css制作表单

创建基本表单结构 使用HTML的<form>标签作为表单容器,内部包含输入字段、标签和提交按钮。表单元素通常需要<label>关联以提高可访问性。 <form>…