element-plus el-form表单验证使用方法以及注意事项

 更新时间:2023年12月05日 10:55:24   作者:柑橘乌云_  
这篇文章主要给大家介绍了关于element-plus el-form表单验证使用方法以及注意事项的相关资料,表单验证能通过设置验证规则验证用户的输入,并对不规范的输入做出对应提示,文中通过代码介绍的非常详细,需要的朋友可以参考下

element-plus@2.0.6 及之后的版本,表单验证不再是同步执行的了

另外,element-plus@2.1.4 及之后的版本,才可按照官方文档示例正常使用(使用的是两者的中间版本的话,最好先自行确认下正确的

const submitForm = async (formEl: FormInstance | undefined) => {
  if (!formEl) return
  await formEl.validate((valid, fields) => {
    if (valid) {
      console.log('submit!') // 位置1
    } else {
      console.log('error submit!', fields)
    }
  })
  // 位置2
}

上例中:

如果在“位置1”执行表单验证通过后的业务代码,可以去掉 async...await

如果在“位置2”执行,则需加上。否则,会直接跳过验证

这样,与异步校验(三、6)的使用办法就一致了,两者可以取其一。element-plus@2.1.4及之后的推荐统一使用上例中的写法

表单定义规则

//表单验证规则 
const rules = reactive({
  name: [{ validator: checkName, trigger: ['blur', 'change'],required: true}],
  phone: [{ type: number, validator: checkPhone, trigger: ['blur', 'change'] }],
  password: [{ validator: checkpassword, trigger: ['blur'] }],
})

el-form配置

<el-form :model="formData" :rules="rules" ref="baseForm"></el-form>

上一步已经为表单绑定了规则列表formData,接下来,只需要在form-item中使用prop绑定验证规则即可

<el-form-item label="电话" style="width: 40%" prop="phone">
   <el-input v-model="formData.phone" type="text" autocomplete="off" disabled />
</el-form-item>

对应关系:

  • 表单对象 formData: { name: '' }
  • 表单元素 prop="name"
  • 规则列表 rules: { name: [{...}] }

另外,验证嵌套属性可以通过 . 连接绑定:

  • formData: { obj: { name: '' } }
  • prop="obj.name"
  • baseRules: { 'obj.name': [{...}] }

完整demo

<template>
    <el-form :model="formData" :rules="rules" ref="ruleFormRef" status-icon label-width="120px" size="large">
        <el-form-item label="姓名" style="width: 40%" prop="name">
          <el-input v-model="form.name" type="text" autocomplete="off" />
        </el-form-item>
        <el-form-item label="性别" style="width: 40%" prop="sex">
          <el-select v-model="form.sex" placeholder="请选择性别">
            <el-option label="男" :value=1 />
            <el-option label="女" :value=0 />
          </el-select>
        </el-form-item>
        <el-form-item label="生日" style="width: 40%" prop="birthday">
          <!-- <el-input v-model="form.birthday" type="text" autocomplete="off" /> -->
          <el-date-picker v-model="form.birthday" type="date" placeholder="请选择生日!" style="width: 100%"
            value-format="YYYY-MM-DD" />
        </el-form-item>
        <el-form-item label="电话" style="width: 40%" prop="phone">
          <el-input v-model="form.phone" type="text" autocomplete="off" disabled />
        </el-form-item>
        <el-form-item label="密码" style="width: 40%" prop="password">
          <el-input v-model="form.password" type="password" autocomplete="off" show-password />
        </el-form-item>
      </el-form>
</template>

<script setup>
let formData = reactive({
  birthday: '',
  name: '',
  phone: '',
  sex: 1,
  password: ''
})
// 验证函数
const checkPhone = (rule, value, callback) => {
  console.log(value);
  if (!Number.isInteger(Number(value))) {
    return callback(new Error('请输入数字!'))
  } else if (String(value).length != 11) {
    return callback(new Error('您输入的手机位数不是11位!'))
  } else {
    callback()
  }
}
// 验证函数
const checkpassword = (rule, value, callback) => {
  console.log(value);
  if (String(value).length > 12) {
    return callback(new Error('您输入的密码过长!长度不超过12位'))
  } else {
    callback()
  }
}
// 验证函数
const checkName = (rule, value, callback) => {
  if (value.length > 8) {
    return callback(new Error('您输入的姓名过长!'))
  } else {
    callback()
  }
}
//表单验证规则 
const rules = reactive({
  name: [{ validator: checkName, trigger: ['blur', 'change'] }],
  phone: [{ type: number, validator: checkPhone, trigger: ['blur', 'change'] }],
  password: [{ validator: checkpassword, trigger: ['blur'] }],
})

</script>

配置项以及其可选的值

详细文档链接

Rules API:

  • type: 指示要使用的验证器类型

type: string, number, boolean, method, regexp, integer, float, array, object, enum, date, url, hex, email, any

  • Required

required:必填/非必填

  • Messages

message: 错误提示

  • Pattern

pattern: 值需校验通过的正则表达式

  • Range

min, max: type为array, string时,指长度。为number时,指大小

  • Length

len: type为array, string时,指长度。为number时,指值

  • Enumerable

enum: 例:{ type: 'enum', enum: ['admin', 'user', 'guest'] }

  • Whitespace

  • Deep Rules 对象的深层规则

fields: 对象的属性名,数组的下标

defaultField: 应用于对象、数组内的所有成员

  • Transform

transform: 方法,对值的预处理

  • validator

validator: 自定义验证方法

  • asyncValidator

asyncValidator: 自定义异步验证方法

trigger: 触发验证的方法,值可用字符串’blur’, ‘change’,也可是数组[‘blur’, ‘change’]

注意,规则数组是按序逐一被执行验证的(trigger='blur’时,更改input框的值不会触发验证)

进阶

单项验证

可在表单的项 ( < el-form-item > ) 中单独设置验证规则

<el-form-item label="邮箱:" prop="email"
  :rules="[{ type: 'email', message: '邮箱格式错误', trigger: 'change' }]"
></el-form-item>

简写:

<el-form-item label="姓名:" prop="username" required />

对于字符串的非空校验,element plus表单验证提供了一种简单的方式(能实现校验,但有很大局限性,而且提示语是英文)

为了代码的可维护性与美观,尽量不要将规则写在模板中。但某些情况下必须如此,比如,当需要额外传递参数给validator时:

<el-form-item label="样本类型:" prop="sampType"
    :rules="[{ validator: (rule, value, cb) => validateSampType(rule, value, cb, yourParams), trigger: 'change' }]"
></el-form-item>

正则校验

//regex.js
// 手机号或座机号
export const reg_tel_phone = /(^((\+86)|(86))?(1[3-9])\d{9}$)|(^(0\d{2,3})-?(\d{7,8})$)/
//doctor.vue
import { reg_tel_phone } from '@/assets/regex'
rules: {
  name: [{ required: true, message: '请输入医生名称', trigger: 'blur' }],
  title: [{ required: true, message: '请选择职称', trigger: 'change' }],
  tel: [{ pattern: reg_tel_phone, message: '请输入正确的手机号或座机号', trigger: ['blur', 'change'] }]
},

注意:直接在vue模板中进行单项验证使用正则校验时,需将RegExp定义成响应式变量。

总结

到此这篇关于element-plus el-form表单验证使用方法以及注意事项的文章就介绍到这了,更多相关element-plus el-form表单验证内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue中引入mxGraph的步骤详解

    vue中引入mxGraph的步骤详解

    本文分步骤给大家介绍了vue中引入mxGraph的方法,非常不错,给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • vue等两个接口都返回结果再执行下一步的实例

    vue等两个接口都返回结果再执行下一步的实例

    这篇文章主要介绍了vue等两个接口都返回结果再执行下一步的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 解决vuex数据页面刷新后初始化操作

    解决vuex数据页面刷新后初始化操作

    这篇文章主要介绍了解决vuex数据页面刷新后初始化操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • vue实现树状表格效果

    vue实现树状表格效果

    这篇文章主要为大家详细介绍了vue实现树状表格效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • 让Vue响应Map或Set的变化操作

    让Vue响应Map或Set的变化操作

    这篇文章主要介绍了让Vue响应Map或Set的变化操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • 关掉vue插件Vetur格式化的时候自动添加的样式操作

    关掉vue插件Vetur格式化的时候自动添加的样式操作

    这篇文章主要介绍了关掉vue插件Vetur格式化的时候自动添加的样式操作,文章围绕主题展开操作过程,需要的小伙伴可以参考一下,希望对你有所帮助
    2022-05-05
  • 浅谈关于.vue文件中style的scoped属性

    浅谈关于.vue文件中style的scoped属性

    本篇文章主要主要介绍了浅谈关于.vue文件中style的scoped属性,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • vue3+ts 兄弟组件之间传值的实现

    vue3+ts 兄弟组件之间传值的实现

    Vue3是一款流行的前端框架,它支持多种传值方式,包括兄弟组件之间的传值,本文主要介绍了vue3+ts 兄弟组件之间传值的实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • 关于vue面试题汇总

    关于vue面试题汇总

    本文给大家收藏整理了关于vue面试题汇总的一些知识,需要的朋友可以参考下
    2018-03-03
  • vue树形结构数据处理的方法总结

    vue树形结构数据处理的方法总结

    在项目开发的过程中,会经常使用树形结构数据,前后端交互都会对数据进行处理,后端返回的数据前端有的时候不能直接使用需要转换,本文小编整理了一些项目中用到的处理方法,需要的朋友可以参考下
    2023-11-11

最新评论