Java中@Pattern注解常用的校验正则表达式学习笔记
作者:ヾ顾北の凉城づ 发布时间:2022-08-07 11:12:10
标签:@pattern,注解,正则表达式
1、 前端传参要求
项目开发中经常会遇到对用户输入内容的限制,本篇对常用限制做一总结。如下图所示,标识字段有严格命名限制,用户输入校验这部分工作前端可以做,当然后端也可以通过在实体类中添加注解的方式实现参数校验。其底层原理还是 * 拦截请求,对带有相关注解的属性字段进行处理(非空、大小、长度、内容等判断和验证)
实体类中代码如下:
/**
* 公司名称
*/
@Pattern(regexp="^[\u4e00-\u9fa5_a-zA-Z0-9]+$",message="公司名称只能输入中文字符 字母、数字")
@ApiModelProperty(value = "公司名称")
private String name;
有时系统对用户名的命名有更多要求,比如用户名必须要有一个小写字母,一个大写字母和一个数字,并且是6-20位,正则表达式如下:
@Pattern(regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[A-Za-z0-9]{6,20}$", message = "用户名错误")
2、其他常用正则表达式
2.1 数字校验
1 整数或者小数:"^[0-9]+\.{0,1}[0-9]{0,2}$"
2 只能输入数字:"^[0-9]*$"
3 只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"
4 只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"
5 只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"
6 只能输入非零的正整数:"^\+?[1-9][0-9]*$"
7 只能输入非零的负整数:"^^-[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.5 联系电话校验
联系电话:@Pattern(regexp = "^[\\d\\*]{7,12}$", message = "联系电话输入有误")
由于区号分为3位和四位的,然后座机号码又分为7位和8位的,所以这里校验的长度是7-12位,并且这里添加了*表示脱敏的手机号仍然可以通过校验。
2.5 密码校验
密码:长度为6-32位,并且必须包含数字、字母、特殊符号中的至少两种:
@Pattern(regexp = "^(?=.*[a-zA-Z0-9].*)(?=.*[a-zA-Z.!@#$%^&*].*)(?=.*[0-9.!@#$%^&*].*).{6,32}$", message = "密码至少包含数字,字母和符号的两种")
来源:https://blog.csdn.net/lk14478/article/details/111866635


猜你喜欢
- 阅读上一篇:FrontPage2002简明教程六:图片库 虽然FrontPage已经给我们提供了很多面很强大的所见即所得的工具,但是随着HT
- 1、引言在Python网络爬虫内容提取器一文我们详细讲解了核心部件:可插拔的内容提取器类gsExtractor。本文记录了确定gsExtra
- 在Dreamweaver4中,你可以存储你自己设定的图片、链接、flash影片、颜色表、模板等等,组成这个站点的资产,这就是Assets面板
- 关于Python的格式化字符串,几乎所有接触过Python语言的人都知道其中一种,即使用运算符%,但对于绝大多数初学者来说也仅此而已。因此,
- 1.基本概念定义含义并发:concurrency,同一时刻只能有一条指令执行,但是多个线程的对应的指令被快速轮换地执行并行parallel,
- 一、mock.js的使用mock.js的使用步骤① 下载依赖 npm install mock -d(开发环境使用)② 引入到main.js
- 学习vue和nodejs的过程当中,涉及到了axios,今天为了测试,写了get和post两个方法来跟node服务端交互,结果因为heade
- 这篇文章主要介绍了Python读取csv文件实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- 展示import tkinter if __name__ == '__main__': win =
- 当你连接到MySQL服务器时,你应使用一个密码。密码不以明文在上传输。客户端连接序列中的密码处理在MySQL 4.1.1中已经升级,很安全。
- 一、vue3的介绍(一)vue3的简介2020年9月18日发布3.0版本。代号海贼王(One piece)其中耗时两年多、2600次提交、3
- 元组是不可变的Python对象序列。元组的序列就像列表。唯一的区别是,元组不能被改变,即元组是不可被修改。元组使用小括号,而列表
- 一、所需库安装pip install PyAudiopip install SpeechRecognitionpip install bai
- 一、使用多个setting文件 开发Django项目是最常见,也是最麻烦的一个问题就是如何区分开发配置与线上配置。有一些解决方案是
- 作为一位不懂代码的业余网页制 * 好者,常常羡慕专业程序人员在浏览器中编制出的效果超酷的一些多媒体作品。唉,无奈程序那东东,酶涩南学,非一日之
- 解决方法:1。 改表法。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql
- 本文主要介绍了python 边缘扩充方式的实现示例,具体如下:import cv2# big_pad=True:当目标图像高和宽均大于原图时
- 编程的生活愈发不容易了,工作越来越难找,说多了都是泪还是给大家贡献些代码比较实际。python3 链接数据库需要下载名为pymysql的第三
- 模型经过训练测试之后,我们往往用一两张图对模型预测结果进行分析讨论,那么下面介绍在keras中用已训练的模型经过测试的方法。下面是以利用预训
- 前言:pandas中排序的几种常用方法,主要包括sort_index和sort_values。基础数据:import pandas as p