@Pattern注解中常用的校验正则表达式札记

Java中@Pattern注解常用的校验正则表达式 项目开发中经常会遇到对用户输入内容的限制和校验,标识字段有严格命名限制,用户输入校验这部分工作前端可以做,当然后端也可以通过在实体类中添加注解的方式实现参数校验。其底层原理还是拦截器拦截请求,对带有相关注解的属性字段进行处理(非空、大小、长度、内容等判断和校验)。 阅读详情

1 前端传参要求

    项目开发中经常会遇到对用户输入内容的限制,本篇对常用限制做一总结。如下图所示,标识字段有严格命名限制,用户输入校验这部分工作前端可以做,当然后端也可以通过在DTO中添加注解的方式实现参数校验。其底层原理还是拦截器拦截请求,对带有相关注解的属性字段进行处理(非空、大小、长度、内容等判断)
用户新建项目示意图

    DTO中代码如下:

@Data
public class ProjectDTO {

    @NotBlank(message = "项目名不能为空")
    private String name;

    private String desc;

    @NotBlank(message = "项目标识符不得为空")
    @Pattern(regexp = "[a-z0-9_\\-]{1,100}", message = "仅小写字母(a-z)、数字、破折号(-)和下划线(_)可以使用,且长度最长为100,最短为1")
    private String identifier;

    private boolean isPublic;

    /***
     * 移动号段: 134 135 136 137 138 139 147 148 150 151 152 157 158 159 165 172 178 182 183 184 187 188 198
     * 联通号段: 130 131 132 145 146 155 156 166 170 171 175 176 185 186
     * 电信号段: 133 149 153 170 173 174 177 180 181 189 191 199
     * 虚拟运营商: 170
     */
    @Pattern(regexp = "^((13[0-9])|(14[5,6,7,9])|(15[^4])|(16[5,6])|(17[0-9])|(18[0-9])|(19[1,8,9]))\\d{8}$", message = "invalid phone number")
    private String phone;

}

    有时系统对用户名的命名有诸多要求,比如用户名必须要有一个小写字母,一个大写字母和一个数字,并且是6-20位,正则表达式如下:

@Pattern(regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[A-Za-z0-9]{6,20}$", message = "用户名错误")

2 其他常用表达式

2.1 数字校验
整数或者小数:"^[0-9]+\.{0,1}[0-9]{0,2}$"
只能输入数字:"^[0-9]*$"
只能输入n位的数字:"^\d{n}$"
只能输入至少n位的数字:"^\d{n,}$"
只能输入m~n位的数字:"^\d{m,n}$"
只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"
只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"
只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"
只能输入非零的正整数:"^\+?[1-9][0-9]*$"
只能输入非零的负整数:"^^-[1-9]+[0-9]*$"
2.2 字符串校验
只能输入长度为3的字符:"^.{3}$"。
只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"
只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"
只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"
只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"
只能输入由数字、26个英文字母或者下划线组成的字符串:"^\w+$"
2.3 月份时间校验
验证一年的12个月:"^(0?[1-9]|1[0-2])$"    //格式为:"01"~"09"和"1"~"12"。
验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"  //格式为;"01"~"09"和"1"~"31"。
2.4 Email校验
这部分由于各种域名邮箱的多样性,需要特殊情况特殊对待,限制可以做的严格也可以宽松
举例:zhangsan_123@cetc.com.cn

分析邮件名称部分:
   字母和数字表示为A-Za-z0-9 
   下划线表示为_
   中划线表示为-
   由于名称是由若干个字母、数字、下划线和中划线组成,所以需要用到+表示多次出现
   通过分析得出邮件名称部分表达式为[a-zA-Z0-9_-]+

分析域名部分:
   一般域名的规律为“[N级域名][三级域名.]二级域名.顶级域名”,比如"qq.com"、"www.qq.com"、"mp.weixin.qq.com"、"12-34.com.cn",分析可得域名类似"** .** .** .**"组成。
   "**"部分可以表示为[a-zA-Z0-9_-]+
   ".**"部分可以表示为\.[a-zA-Z0-9_-]+
   多个".**"可以表示为(\.[a-zA-Z0-9_-]+)+
   综上所述,域名部分可以表示为[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+
   
最终表达式: 
 我们用@符号将邮箱的名称和域名拼接起来,因此完整的邮箱表达式为 
  ^[A-Za-z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$

验证Email: "^[A-Za-z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$"
2.5 汉字校验
只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"

匹配中文字符的正则表达式:"[\u4e00-\u9fa5]"
2.6 URL校验
未校验汉字
验证URL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"or
"(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]"
2.7 固定电话校验
电话号码:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"  
//格式为:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
【项目实战】Spring Boot项目中@Pattern注解与正则表达式的使用 在DTO或Model中,使用@Pattern注解来定义验证规则在这个例子中,username字段被限制为以大小写字母开头,后面可以跟任意数量的大小写字母、数字或下划线。// 其他字段... @Pattern(regexp = "^[a-zA-Z][a-zA-Z0-9_]*$" , message = "用户名必须以字母开头,且只能包含(大小写字母,数字,下划线)") private String username;// getter和setter方法... } 阅读详情

相关推荐

别再折腾框架了!用华为应用市场官方渠道搞定GBOX,安全安装谷歌全家桶(鸿蒙HarmonyOS 3/4实测)

本文详细介绍了如何在鸿蒙系统上通过华为应用市场官方渠道安全安装GBOX,实现谷歌全家桶的无损使用。该方法避免了传统破解方式的安全风险,利用沙箱技术隔离运行环境,确保系统稳定性和数据安全。特别适合鸿蒙HarmonyOS 3/4用户安全使用谷歌生态应用。

weixin_29305313的博客 4743

正则表达式

一、校验数字的表达式 数字:1*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$ 带1-2位小数的正数或负数:^(-)?\d+(.\d{1,2})?$ 正数、负数、和...

qq_43330631的博客 814

从EXIF到测绘:解码大疆影像元数据的实战应用指南

本文深入解析了大疆无人机影像元数据的实战价值,重点阐述了如何利用EXIF和XMP中的GPS、RTK、姿态角及相机内参等关键信息,提升测绘、三维重建及精准农业等项目的成果精度与效率。通过自动化质检脚本与行业应用场景剖析,指导从业者将元数据从信息转化为生产力,实现从拍照到专业测绘的跨越。

dell8的博客 525

正则表达式校验器@Pattern(regexp)

确保字符串符合特定的模式。

anyeyeyeyeye的博客 1543

RTX 5090配Ubuntu 24.04踩坑记:手把手搞定OpenVLA-OFT环境(附版本避坑清单)

本文详细记录了在RTX 5090显卡和Ubuntu 24.04系统上部署OpenVLA-OFT环境的完整过程,包括驱动安装、CUDA配置、PyTorch版本选择等关键步骤。提供了经过验证的版本组合清单和常见错误解决方案,帮助开发者高效搭建AI开发环境。

weixin_30342209的博客 465

攻克JESD204B多ADC同步:从时钟对齐到数据对齐的实战解析

本文深入解析了JESD204B多ADC同步的系统性挑战与实战解决方案。从确保设备时钟同源、精确捕获SYSREF信号,到管理接收端弹性缓冲区与释放点,文章提供了从时钟对齐到数据对齐的完整调试路径与排查清单,是攻克高速数据采集系统中多片ADC同步难题的实用指南。

weixin_29231725的博客 197

@Pattern的用法

版权声明:本文为优快云博主「wojiaohb」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.youkuaiyun.com/wojiaohb/article/details/106716802。关于注解中需要传的参数:一般默认就填入正则表达式即可,但是java中字符串需要转义,这个需要注意一下。犹豫上面写不下,以下是单独标记的方式,可供参考。把这个注解加在entity的参数上,可以选择分类也可以默认;一、校验数字的表达式。二、校验字符的表达式。

Purpletaro的专栏 6165

手把手教你用Simulink搭建交流异步电机矢量控制模型(附完整仿真文件)

本文详细介绍了如何使用Simulink搭建交流异步电机矢量控制模型,涵盖系统架构设计、关键模块实现、PI调节器参数整定及仿真分析等核心内容。通过实战指南和完整仿真文件,帮助读者掌握矢量控制技术,提升电机控制系统的设计与调试能力。

n4o5p6q7r的博客 250

后端对前端参数校验(包括自定义注解)

1. @NotNull:不能为null,但可以为empty,用在基本类型上,Long,Integer, @NotEmpty:不能为null,而且长度必须大于0 ,用在集合类上面 @NotBlank:只能作用在String上,不能为null,不能为 empty(or ""),而且调用trim()后,长度必须大于0 (使用的话,需要在controller层加上@Valid) @GetMapping(value = "/testValid") public String ge..

qq_38807606的博客 2003

【75】OpenCV C++实战篇——OpenCV 图像拼接、全景拼接(教程合集)

本文整理了OpenCV实现图像拼接的技术教程合集,涵盖C++和Python两种语言实现方案。图像拼接技术旨在将多张重叠图像融合为无缝全景图,既扩大视角又保持高分辨率。内容包含水平矫正等关键步骤(附对比效果图),提供多个实战案例的完整代码和详细讲解,涉及单应性矩阵、图像变换等核心技术。不同案例展示了从两张到多张图像的拼接效果,适合不同层次的学习者参考实践。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 528

【Java基础知识 19】Java接口的作用和意义

Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

学Java,找哪吒 2万+

Java 注解@Pattern 参数验证------正则验证

对于正则这个东西,对我来说一直是很懵逼的,每次用每次查,然后还是记不住,这次又要在参数上加格式验证了,改了几次,改的心力憔悴,这次又一点一点的从语法开始自己拼写的正则貌似好使了,记录一下。 首先来从基本语法符号开始: ^ 表示匹配字符串的开始位置 (例外 用在中括号中[ ] 时,可以理解为取反,表示不匹配括号中字符串) $ 表示匹配字符串的结束位置 * 表示匹配 零次到多次 + 表示...

种一棵树最好的时间是十年前,其次是现在。 3万+

7.18 GART 与 GPUVM 对比:一颗 GPU 上两套页表的分工

本文横向对比AMD GPU上并存的GART与GPUVM两套页表。GART为内核专用,全局单一,线性单层结构,CPU同步直写;GPUVM为每进程48位地址空间,四级页表,含并发状态机,支持隔离与迁移。二者通过VMID区分,共享GMC硬件与PTE编码,分工互补。

图形/计算GPU的驱动与虚拟化技术分享园地 377

@Pattern注解中常用的校验正则表达式笔记

1、 前端传参要求 项目开发中经常会遇到对用户输入内容的限制,本篇对常用限制做一总结。如下图所示,标识字段有严格命名限制,用户输入校验这部分工作前端可以做,当然后端也可以通过在实体类中添加注解的方式实现参数校验。其底层原理还是拦截器拦截请求,对带有相关注解的属性字段进行处理(非空、大小、长度、内容等判断和验证) 实体类中代码如下: /** * 公司名称 */ @Pattern(regexp="^[\u4e00-\u9fa5_a-zA-Z0-9]+$",message="公司名称只能输入中文字符 字母、数字

lk14478的博客 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

spring boot-@Validated参数校验 @Pattern 利用正则自定义注解

文章目录问题背景validation--参数校验@Pattern 利用正则自定义注解 问题背景 validation–参数校验 JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,用于对 Java Bean 中的字段的值进行验证。Hibernate Validator则是Hibdernate提供的一种对该规范的实现。 ——即Hibernate Validator是用来做参数校验。 Hibernate Validator:是JSR-303参考实现。 Constrani

西京刀客 3万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

javax.validation; @Pattern(regexp='正则表达式')

1、 javax.validation; @Pattern(regexp=‘正则表达式’) 这个注解的意思就是做 ‘正则表达式’ 验证; 如果要时间格式, 则编写时间正则表达式; 如果要验证邮箱,在编写邮箱正则表达式; 时间正则表达式, 可以用java.util.regex.Pattern 表示正则表达式。 ...

jupiter_888的博客 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

使用@Pattern@Validated校验 并抛出异常

基类里的属性 regexp 是正则表达式 一般默认就填入正则表达式即可,但是java中字符串需要转义,这个需要注意一下。 基类 /** 标识码 */ @Pattern(regexp = "^\\d{11}$",message = "mis只能由数字组成") @ApiModelProperty("标识码") private String mis; 控制层 在传参或者controller层中的添加@Validated注解进行调用,我这里是在控制层添加 控制层加上@Validat

qq_42199464的博客 3887

@Pattern参数校验增强工具类@NotBlankThenPattern

/** * 自定义注解 字段非空时才按照正则校验 * @author dxy * @version 1.0 * @date 2022/3/21 11:39 * @descrition * @Version 1.0 */ @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE}) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = .

焱童鞋 691

正则表达式-常用

方法/步骤 1 整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$ 2 只能输入数字:"^[0-9]*$"。 3 只能输入n位的数字:"^\d{n}$"。 4 只能输入至少n位的数字:"^\d{n,}$"。 5 只能输入m~n位的数字:。"^\d{m,n}$" 6 ...

dengyibin9986的博客 226

@Pattern进行正则校验

@Pattern(regexp = "\\d{4}", message = "仓位标识格式不正确", flags = {}, groups = {}, payload = {}) 作用于属性 regexp:正则表达式 message:不符合条件时的提示信息 flags:匹配标志,一个位掩码,可能包括 CASE_INSENSITIVE , MULTILINE , DOTALL , UNICODE...

可乐止饱 6833

java中判断字符串是否为数字的方法

java中判断字符串是否为数字的方法: 1.用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = 0; i < str.length(); i++){ System.out.println(str.charAt(i)); if (!Character.isDigit(str.char...

anyeeye 2303

正则表达式限制输入整数或小数

string pattern = @"^\d{1,7}(?:\.\d{0,2}$|$)"; //这是一个格式匹配字符串 其中的含义可以参考http://hi.baidu.com/%D6%C2%D0%F9%B8%F3/blog/item/9060fe35f84f872370cf6c83.html。如果调用以下代码,可以匹配整数位最多为7位,小数位最多为2位的数值型数据(也就是只能输入数字和小数点)...

weixin_30245867的博客 1025

Java中@Pattern的使用方法

在上述示例中,@Pattern(regexp = “\d{3}-\d{4}”, message = “请输入合法的电话号码”)指定了一个正则表达式模式,用于验证电话号码的格式是否为三位数字加上一个短横线再加上四位数字的格式。如果验证失败,则会抛出一个验证异常,异常信息为"请输入合法的电话号码"。在Java中,@Pattern注解用于指定一个正则表达式模式,用于验证一个字符串的格式是否满足要求。使用@Pattern注解需要先导入javax.validation.constraints包。

weixin_43109842的博客 1265
上一篇: 微服务后端接口开发及返回值规范札记
下一篇: springboot 基于注解实现多数据源切换
zhg_vincent
博客等级 码龄12年 93粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值