vue3表单参数校验+正则表达式

news/2024/5/16 10:39:45

这里我们要实现在form表单中对表单项添加参数校验。

校验要求

我们的表单中有用户名、密码、电话号码、邮箱这四个项。

我们设置用户名为3到20位的非空字符

密码为3到25位非空字符

电话号码就用目前用的电话号码正则表达式,要求手机号码以 1 开头,第二位为 3 到 9 之间的数字,后面跟着任意 9 个数字,总共是 11 位数字。

邮箱就用目前用的邮箱正则表达式,要求一个或多个字母、数字或下划线,接着是 @ 符号,然后是一个或多个字母、数字或下划线,接着是一个句点,最后是一个或多个字母、数字或下划线。

首先搭建页面

页面主要代码:

                    <el-form ref="form"><el-form-item><el-input :prefix-icon="User" placeholder="请输入用户名"></el-input></el-form-item><el-form-item><el-input :prefix-icon="Lock" placeholder="请输入密码"></el-input></el-form-item><el-form-item><el-input :prefix-icon="Phone" placeholder="请输入电话号码"></el-input></el-form-item><el-form-item><el-input :prefix-icon="Message" placeholder="请输入邮箱"></el-input></el-form-item><el-form-item><el-button type="primary"@click="register">注册</el-button></el-form-item></el-form>

然后对页面进行数据绑定:

为了方便传数据到后端,我们就设置前端表单项的属性名和后端的一样。再在<script setup></script>里面定义数据模型为registerData,里面有username,password,phone,email。初始都设为空的。

import {ref} from 'vue'//定义数据模型const registerData = ref({username: '',password: '',phone: '',email: ''})

再绑到表单上。

<el-form ref="form" class="form" autocomplete="off" :model="registerData" >

表单项中用:

<el-form-item><el-input :prefix-icon="User" placeholder="请输入用户名"v-model="registerData.username"></el-input>
</el-form-item>

比如设置了数据模型名为registerData后在v-model中用户名我们要写registerData.username。以此类推密码、号码、邮箱。

然后要定义表单规则,校验嘛。我们要写在表单的上面,在<script setup></script>里面生效。

username校验规则部分代码:

username: [{require: true, message: '请输入用户名', trigger: 'blur'},{min: 3,max: 20,message: '用户名为3~20位非空字符',trigger: 'blur'},{validator: checkUserName,trigger: 'blur'}],

username校验规则的checkUserName函数代码:

const checkUserName = (rule, value, callback) => {if (value.trim() === '') {callback(new Error("姓名不可为空"))} else {return callback();}}

Const rules{}中有表单中的四项,还是以用户名为例,可以设置默认的{require: true, message: '请输入用户名', trigger: 'blur'},使得必须输入。(不过我试的这个好像不管用,就加上了后面的另外的validator里的规则)。

{
    min: 3,
    max: 20,
    message: '用户名为3~20位非空字符',
    trigger: 'blur'
},

上面这段是设置输入的长度为3到20位。

{
    validator: checkUserName,
    trigger: 'blur'
}

Validator这里的checkUserName也是我们自己定义的,用来判断输入是否为空的或者输入的全是空格。如果没有这个value.trim()的话,输入三个空格也不会报错。Callback里的error是给出校验不通过时的报错提示信息

const checkUserName = (rule, value, callback) => {
    if (value.trim() === '') {
        callback(new Error("姓名不可为空"))
    } else {
        return callback();
    }
}

在el-form标签上通过rules属性,绑定校验规则

<el-form ref="form" class="form" autocomplete="off" :model="registerData" :rules="rules">

也就是在原来的基础上加了一个: rules="rules",这个"rules"是我们在const rules{}的那个"rules",规则名。

在el-form-item标签上通过prop属性,指定校验项

接下来在el-form-item标签上通过prop属性,指定校验项。是在el-form-item里加prop="username",也就是你的校验项的属性名。

<el-form-item prop="username"><el-input :prefix-icon="User" placeholder="请输入用户名"v-model="registerData.username"></el-input>
</el-form-item>

以上就完成了表单的校验。

看看效果:

都点进输入框后不输入内容就点框外的情况:

在框中都输三个空格

在姓名和密码输入框中输入小于三个字符,在电话号码输入框和邮箱输入框输入不符合规则的号码和邮箱



下面提供给大家电话号码的正则表达式和邮箱的正则表达式。

电话号码正则表达式为/^1[3-9]\d{9}$/

/^1[3-9]\d{9}$/

^:表示匹配字符串的开始。

1:匹配数字 1。

[3-9]:表示匹配数字范围在 3 到 9 之间的任意一个数字。

\d:匹配任意一个数字。

{9}:表示前面的 \d 必须重复匹配 9 次。

$:表示匹配字符串的结束。

综合起来,这个正则表达式用于验证手机号码格式,要求手机号码以 1 开头,第二位为 3 到 9 之间的数字,后面跟着任意 9 个数字,总共是 11 位数字。

邮箱的正则表达式为:

/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/

/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/

^:表示匹配字符串的开始。

\w+:匹配一个或多个字母、数字或下划线。

([-+.]\w+)*:表示匹配一个可选的子模式,其中包含一个连字符、加号或句点,后面跟着一个或多个字母、数字或下划线。整个子模式可以重复零次或多次。

@:匹配电子邮件地址中的 "@" 符号。

\w+:再次匹配一个或多个字母、数字或下划线。

([-.]\w+)*:类似于第二个子模式,但是匹配的是一个连字符或句点,后面跟着一个或多个字母、数字或下划线。

\.:匹配电子邮件地址中的句点。

\w+:再次匹配一个或多个字母、数字或下划线。

([-.]\w+)*:类似于前两个子模式,用于匹配邮箱地址中的域名部分。

$:表示匹配字符串的结束。

综合起来,这个正则表达式用于验证电子邮件地址的格式,匹配的规则大致是“一个或多个字母、数字或下划线,接着是 @ 符号,然后是一个或多个字母、数字或下划线,接着是一个句点,最后是一个或多个字母、数字或下划线”


 附:邮箱校验规则部分的代码:

//定义邮箱校验规则
const checkEmail = (rule, value, callback) => {const regEmail = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;if (value === '') {callback(new Error("邮箱不可为空"))} else if (regEmail.test(value)) {return callback();}callback(new Error("请输入合法的邮箱"));
}

希望这篇文章能够帮助到你^_^加油加油

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.tangninghui.cn.cn/item-12588.htm

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

TCP/IP协议、HTTP协议和FTP协议等网络协议包简介

文章目录 一、常见的网络协议二、TCP/IP协议1、TCP/IP协议模型被划分为四个层次2、TCP/IP五层模型3、TCP/IP七层模型 三、FTP网络协议四、Http网络协议1、Http网络协议简介2、Http网络协议的内容3、HTTP请求协议包组成4、HTTP响应协议包组成 一、常见的网络协议 常见的网络协议…

idea改vm参数后没法重启

背景 Idea2023修改了编译器compiler内存&#xff0c;maven的run time内存&#xff0c;idea安装目录下idea64.exe.vmoptions选项的jvm内存参数后导致idea启动时没有任何反应&#xff0c;也没有任何日志输出 idea2023没法重启 导致idea2023没法重启的操作步骤如下 1.修改idea的…

增加网站搜索引擎排名的6个准则

怎样提高网站排名首页 在竞争激烈的网络世界中&#xff0c;网站的排名对于吸引流量和提升曝光至关重要。登上搜索引擎结果页面的首页&#xff0c;意味着更多的曝光和点击率。以下是一些方法&#xff0c;可以帮助您提高网站在搜索引擎中的排名&#xff0c;让其跻身首页&#xf…

深入解析大数据体系中的ETL工作原理及常见组件

** 引言 关联阅读博客文章&#xff1a;探讨在大数据体系中API的通信机制与工作原理 关联阅读博客文章&#xff1a;深入理解HDFS工作原理&#xff1a;大数据存储和容错性机制解析 ** 在当今数字化时代&#xff0c;大数据处理已经成为了企业成功的重要组成部分。而在大数据处…

【opencv】教程代码 —video(2) optical_flow (稀疏光流、稠密光流)

1. optical_flow.cpp 稀疏光流 #include <iostream> // 引入输入输出流库 #include <opencv2/core.hpp> // 引入OpenCV的核心功能模块 #include <opencv2/highgui.hpp> // 引入OpenCV的高级GUI模块&#xff0c;提供显示图像的功能 #include <opencv2/imgp…

54 npm run serve 和 npm run build 输出的关联和差异

前言 通常来说 我们开发的时候一般会用到的命令是 “npm run serve”, “npm run build” 前者会编译当前项目, 然后将编译之后的结果以 node 的形式启动一个服务, 暴露相关业务资源, 因此 我们可以通过 该服务访问到当前项目 后者是编译当前项目, 然后做一下最小化代码的优…