正则表达式使用示例

下面以 Vue(前端)和 Spring Boot(后端)为例,展示正则表达式在前后端交互中的应用,以邮箱格式验证为场景:

1.前端

<template><div class="register-container"><h3>用户注册</h3><form @submit.prevent="handleSubmit"><div class="form-group"><label>邮箱:</label><input type="text" v-model="email" @input="validateEmail"placeholder="请输入邮箱"><p class="error-message" v-if="!isEmailValid && email.length > 0">请输入有效的邮箱格式(如:example@domain.com)</p></div><button type="submit" :disabled="!isEmailValid">注册</button></form></div>
</template><script setup>
import { ref, computed } from 'vue';
import axios from 'axios';// 响应式数据
const email = ref('');// 邮箱正则表达式(与后端保持一致)
const emailReg = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;// 验证状态
const isEmailValid = computed(() => {return emailReg.test(email.value);
});// 实时验证(可选,也可依赖computed自动响应)
const validateEmail = () => {// 可在这里添加更复杂的验证逻辑
};// 提交表单
const handleSubmit = async () => {try {const response = await axios.post('/api/register', { email: email.value });alert(response.data.message);} catch (error) {alert(error.response?.data?.message || '注册失败');}
};
</script><style scoped>
.register-container {max-width: 400px;margin: 20px auto;padding: 20px;border: 1px solid #ddd;border-radius: 4px;
}.form-group {margin-bottom: 15px;
}input {width: 100%;padding: 8px;margin-top: 5px;border: 1px solid #ddd;border-radius: 4px;
}.error-message {color: #ff4444;font-size: 12px;margin: 5px 0 0 0;
}button {padding: 8px 16px;background-color: #007bff;color: white;border: none;border-radius: 4px;cursor: pointer;
}button:disabled {background-color: #cccccc;cursor: not-allowed;
}
</style>

2.后端

import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import jakarta.validation.Valid;
import jakarta.validation.constraints.Pattern;@RestController
@RequestMapping("/api")
@Validated // 开启方法参数验证
public class UserController {// 邮箱正则表达式(与前端保持一致)private static final String EMAIL_REGEX = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";@PostMapping("/register")public ResponseEntity<Result> register(@Valid @RequestBody RegisterRequest request) {// 验证通过:执行注册逻辑(如存入数据库)return ResponseEntity.ok(new Result(true, "邮箱 " + request.getEmail() + " 格式验证通过,注册成功!"));}// 请求参数封装类public static class RegisterRequest {@Pattern(regexp = EMAIL_REGEX,message = "邮箱格式无效,请重新输入")private String email;// getter和setterpublic String getEmail() {return email;}public void setEmail(String email) {this.email = email;}}// 响应结果封装类public static class Result {private boolean success;private String message;public Result(boolean success, String message) {this.success = success;this.message = message;}// getter和setterpublic boolean isSuccess() {return success;}public void setSuccess(boolean success) {this.success = success;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}}
}

3.小结

前端验证逻辑

  • 使用 Vue 的响应式数据email绑定输入框
  • 通过计算属性isEmailValid实时判断格式是否正确
  • 提交按钮状态随验证结果动态禁用 / 启用
  • 用 Axios 发送 POST 请求到后端接口

后端验证逻辑

  • 使用@Pattern注解在RegisterRequest类中定义邮箱正则规则
  • 添加@Valid注解触发参数验证
  • 验证失败时,Spring 会自动返回 400 错误和自定义提示信息
  • 验证通过后执行实际注册逻辑

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云端微光,AI启航:低代码开发的智造未来

文章目录前言一、引言&#xff1a;技术浪潮中的个人视角初次体验腾讯云开发 Copilot1.1 低代码的时代机遇1.1.1 为什么低代码如此重要&#xff1f;1.2 AI 的引入&#xff1a;革新的力量1.1.2 Copilot 的亮点1.3 初学者的视角1.3.1 Copilot 带来的改变二、体验记录&#xff1a;云…

图片上传实现

图片上传change函数图片上传图片上传到服务器上传的图片在该页面中显示修改界面代码最终实现效果change函数 这里我们先用输入框控件来举例&#xff1a; 姓名&#xff1a;<input typetext classname>下面我们来写 js 语句&#xff0c;对控件进行绑事件来获取输入框内的…

【PTA数据结构 | C语言版】多叉堆的上下调整

本专栏持续输出数据结构题目集&#xff0c;欢迎订阅。 文章目录题目代码题目 请编写程序&#xff0c;将 n 个已经满足 d 叉最小堆顺序约束的数据直接读入最小堆&#xff1b;随后将下一个读入的数据 x 插入堆&#xff1b;再执行删顶操作并输出删顶的元素&#xff1b;最后顺次输…

selenium后续!!

小项目案例:实现批量下载网页中的资源根据15.3.2小节中的返回网页内容可知,用户只有获取了网页中的图片url才可以将图片下载到*在使用selenium库渲染网页后,可直接通过正则表达式过滤出指定的网页图片&#xff0c;从而实现批量下载接下来以此为思路来实现一个小项目案例。项目任…

深度解析Linux文件I/O三级缓冲体系:用户缓冲区→标准I/O→内核页缓存

在Linux文件I/O操作中&#xff0c;缓冲区的管理是一个核心概念&#xff0c;主要涉及用户空间缓冲区和内核空间缓冲区。理解这两者的区别和工作原理对于高效的文件操作至关重要。 目录 一、什么是缓冲区 二、为什么要引入缓冲区机制 三、三级缓冲体系 1、三级缓冲体系全景图…

【每日算法】专题十三_队列 + 宽搜(bfs)

1. 算法思路 BFS 算法核心思路 BFS&#xff08;广度优先搜索&#xff09;使用 队列&#xff08;Queue&#xff09;按层级顺序遍历图或树的节点。以下是 C 实现的核心思路和代码模板&#xff1a; 算法框架 #include <queue> #include <vector> #include <un…

【动手实验】发送接收窗口对 TCP传输性能的影响

环境准备 服务器信息 两台腾讯云机器 t04&#xff08;172.19.0.4&#xff09;、t11&#xff08;172.19.0.11&#xff09;&#xff0c;系统为 Ubuntu 22.04&#xff0c;内核为 5.15.0-139-generic。默认 RT 在 0.16s 左右。 $ ping 172.19.0.4 PING 172.19.0.4 (172.19.0.4) …

28、鸿蒙Harmony Next开发:不依赖UI组件的全局气泡提示 (openPopup)和不依赖UI组件的全局菜单 (openMenu)、Toast

目录 不依赖UI组件的全局气泡提示 (openPopup) 弹出气泡 创建ComponentContent 绑定组件信息 设置弹出气泡样式 更新气泡样式 关闭气泡 在HAR包中使用全局气泡提示 不依赖UI组件的全局菜单 (openMenu) 弹出菜单 创建ComponentContent 绑定组件信息 设置弹出菜单样…

让老旧医疗设备“听懂”新语言:CAN转EtherCAT的医疗行业应用

在医疗影像设备的智能化升级中&#xff0c;通信协议的兼容性常成为工程师的“痛点”。例如&#xff0c;某医院的移动式X射线机采用CAN协议控制机械臂&#xff0c;而主控系统基于EtherCAT架构。两者协议差异导致数据延迟高达5ms&#xff0c;影像定位精度下降&#xff0c;甚至影响…

ubuntu基础搭建

ubuntu上docker的搭建 https://vulhub.org/zh 网站最下面找到开始使用&#xff0c;有搭建的命令//安装docker&#xff0c;连接失败多试几次 curl -fsSL https://get.docker.com | sh //验证Docker是否正确安装&#xff1a; docker version //还要验证Docker Compose是否可用&am…

动态规划 + DFS + 记忆化!Swift 解 LeetCode 329 的实战笔记

文章目录摘要描述题解答案题解代码分析代码解析示例测试及结果时间复杂度空间复杂度总结摘要 这篇文章带你用 Swift 实战一道非常经典的 DFS 记忆化搜索题目 —— LeetCode 329《矩阵中的最长递增路径》。看似一个简单的“走格子”游戏&#xff0c;实则考察了搜索顺序、剪枝策…

046_局部内部类与匿名内部类

一、局部内部类&#xff08;Local Inner Class&#xff09; 1.1 定义与基本概念 局部内部类是定义在方法、构造器或代码块内部的类&#xff0c;其作用域仅限于所在的局部范围&#xff08;定义它的方法、构造器或代码块&#xff09;&#xff0c;超出该范围则无法访问。 它的核心…

Jenkins Pipeline 中使用 JsonSlurper 报错:cannot find current thread

Jenkins Pipeline 中使用 JsonSlurper 报错&#xff1a;cannot find current thread&#x1f31f; 背景⚠ 问题重现&#x1f9e0; 原因解析&#xff1a;CPS 与非 CPS 安全方法冲突✅ 解决方案一&#xff1a;使用 NonCPS 注解&#xff08;经典方案&#xff09;✅ 解决方案二&…

Go 语言循环语句详解

Go 语言循环语句详解 在编程语言中&#xff0c;循环语句是实现重复执行某些代码块的关键元素。Go 语言作为现代编程语言之一&#xff0c;提供了多种循环结构来满足不同的编程需求。本文将详细讲解 Go 语言中的循环语句&#xff0c;包括 for、while 和 goto 语句&#xff0c;帮助…

day30——零基础学嵌入式之进程间通信1.0

一、进程间通信7种方式1.传统的进程间通信方式&#xff08;1&#xff09;管道①无名管道&#xff1a;②有名管道&#xff1a;&#xff08;2&#xff09;③信号&#xff08;3&#xff09;system Ⅴ 》系统Ⅴ 进程间通信方式 inner Process Comunication④共享内存 &#xff…

408考研逐题详解:2010年第33题——网络体系结构

2010年第33题 下列选项中&#xff0c;不属于网络体系结构所描述的内容是&#xff08; &#xff09; A. 网络的层次 \qquad B. 每层使用的协议 \qquad C. 协议的内部实现细节 \qquad D. 每层必须完成的功能 解析 本题属于计算机网络基础知识的范畴&#xff0c;考查网络体系结构…

VR 远程系统的沉浸式协作体验​

在传统的远程协作中&#xff0c;团队成员往往通过二维的视频画面进行交流&#xff0c;这种方式虽然能实现基本的沟通&#xff0c;但缺乏真实感和互动性。而 VR 远程系统的出现&#xff0c;彻底改变了这一局面。戴上 VR 设备&#xff0c;员工们仿佛置身于同一个真实的办公室空间…

记录DataGrip 2025.1.3破解失败后,无法重启问题修复

记录DataGrip 2025.1.3破解失败后&#xff0c;无法重启问题修复安装过程复盘异常场景解决方式总结安装过程 在官网下载了最新版本2025.1.3。安装成功后&#xff0c;使用30天试用方式&#xff0c;打开datagrip。 复盘异常场景 网上搜索破解教程进行破解。找了一个需要现在ja…

私有服务器AI智能体搭建配置选择记录

在搭建私有服务器上的AI智能体时&#xff0c;需要从多个方面进行选择和规划&#xff0c;以确保系统性能、安全性、可扩展性等方面满足需求。1. 硬件选择 服务器配置&#xff1a; CPU&#xff1a;选择高性能多核CPU&#xff08;如Intel Xeon或AMD EPYC系列&#xff09;&#xff…

SDC Specical check setting的描述 - false path

在上一篇文中描述了SDC的基本语法&#xff0c;其中关于时序异常约束并没有进行详细的描述&#xff0c;但是在正常的设计中&#xff0c;一般这种异常的设置反而是需要特别关注的&#xff0c;主要包括&#xff1a;1. 虚假路径- false path不需要满足任何时序要求的路径&#xff1…