参考耗时一周,我打造了一个正则表达式学习神器!_哔哩哔哩_bilibili

史上最全常用正则表达式大全 - fozero - 博客园 (cnblogs.com)

在开发过程中, 经常需要使用校验, 每次搜索正则表达式非常浪费时间并且不靠谱, 从b站up主CodeSheep 处找到了常用正则总结, 在此保存方便以后查找。

在线测试正则表达式 : 正则表达式在线测试 | 菜鸟工具 (runoob.com)

数字校验

描述 正则表达式 备注
数字 ^[0-9]*$
n位数字 ^\d{n}$
至少n位数字 ^\d{n,}$
m~n位数字 ^\d{m,n}$
整数 ^(-?[1-9]\d*)$ 非0开头,包括正整数和负整数
正整数 ^[1-9]\d*$
负整数 ^-[1-9]\d*$
非负整数 `^(([1-9]\d*) 0)$`
非正整数 `^((-[1-9]\d*) 0)$`
浮点数 `^-?(?:[1-9]\d*.\d* 0.\d*[1-9]\d*
正浮点数 `^(?:[1-9]\d*.\d* 0.\d*[1-9]\d*)$`
负浮点数 `^-(?:[1-9]\d*.\d* 0.\d*[1-9]\d*)$`
非正浮点数 `^(?😦?:[1-9]\d*.\d+ 0.\d*[1-9]\d*)
非负浮点数 `^(?:[1-9]\d*.\d+ 0.\d+
仅一位小数 `^-?(?:0 [1-9][0-9]*).[0-9]{1}$`
最少一位小数 `^-?(?:0 [1-9][0-9]*).[0-9]{1,}$`
最多两位小数 `^-?(?:0 [1-9][0-9]*).[0-9]{1,2}$`
连续重复的数字 ^(\d)\1+$ 例如:111222

字符校验

描述 正则表达式 备注
中文 ^[\u4E00-\u9FA5]+$
全角字符 ^[\uFF00-\uFFFF]+$
半角字符 ^[\u0000-\u00FF]+$
英文字符串(大写) ^[A-Z]+$
英文字符串(小写) ^[a-z]+$
英文字符串(不区分大小写) ^[A-Za-z]+$
中文和数字 `^(?:[\u4E00-\u9FA5]{0,} \d)+$`
英文和数字 ^[A-Za-z0-9]+$
数字、英文字母或者下划线组成的字符串 ^\w+$
中文、英文、数字包括下划线 ^[\u4E00-\u9FA5\w]+$
不含字母的字符串 ^[^A-Za-z]*$
连续重复的字符串 ^(.)\1+$ 例如:aaabbb
长度为n的字符串 ^.{n}$
ASCII ^[ -~]$

日期和时间校验

描述 正则表达式 备注
日期 `^\d{1,4}-(?:1[0-2] 0?[1-9])-(?:0?[1-9]
日期 `^(?😦?!0000)[0-9]{4}-(?😦?:0[1-9] 1[0-2])-(?:0[1-9]
时间 `^(?:1[0-2] 0?[1-9]):[0-5]\d:[0-5]\d$`
时间 `^(?:[01]\d 2[0-3]):[0-5]\d:[0-5]\d$`
日期+时间 `^(\d{1,4}-(?:1[0-2] 0?[1-9])-(?:0?[1-9]

日常生活

描述 正则表达式 备注
中文名 ^[\u4E00-\u9FA5·]{2,16}$
英文名 ^[a-zA-Z][a-zA-Z\s]{0,20}[a-zA-Z]$
车牌号 ^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]$ 不含新能源
车牌号 `[1][A-HJ-NP-Z](?😦?:[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]) (?😦?:\d{5}[A-HJK])
火车车次 ^[GCDZTSPKXLY1-9]\d{1,4}$ 例如:G1234
手机号 `^(?😦?:+ 00)86)?1[3-9]\d{9}$`
手机号 `^(?😦?:+ 00)86)?1(?😦?:3[\d])
固话号码 `^(?😦?:\d{3}-)?\d{8} ^(?:\d{4}-)?\d{7,8})(?:-\d+)?$`
手机IMEI码 ^\d{15,17}$ 一般是15位
邮编 `^(?:0[1-7] 1[0-356]
统一社会信用代码 ^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$
身份证号码(1代) `[2]\d{7}(?:0\d 10
身份证号码(2代) `[3]\d{5}(?:18 19
QQ号 ^[1-9][0-9]{4,}$ 一般是5到10位
微信号 ^[a-zA-Z][-_a-zA-Z0-9]{5,19}$ 一般6~20位,字母开头,可包含字母、数字、-、_,不含特殊字符
股票代码 `^(s[hz] S[HZ])(000[\d]{3}
银行卡卡号 `[4]{1}(?:\d{15} \d{18})$`

互联网相关

描述 正则表达式 备注
域名 ^[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$ 例如:r2coding.com
网址 ^(?:https?:\/\/)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$ 例如:https://www.r2coding.com/
带端口号的网址(或IP) ^(?:https?:\/\/)?[\w-]+(?:\.[\w-]+)+:\d{1,5}\/?$ 例如:http://127.0.0.1:8888/
URL ^https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()!@:%_\+.~#?&\/\/=]*)$ 例如:https://www.r2coding.com/#/README?id=1
邮箱email ^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$ 支持中文,例如:codesheep@cs.com
用户名 ^[a-zA-Z0-9_-]{4,20}$ 4到20位
弱密码 ^[\w]{6,16}$ 6~16位,包含大小写字母和数字的组合
强密码 ^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@\.#$%^&*? ]).*$ 至少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符
端口号 `^(?:[0-9] [1-9][0-9]{1,3}
IPv4地址 `^(?😦?:\d [1-9]\d
IPv4地址+端口 `^(?😦?:\d [1-9]\d
IPv6地址 `^(([0-9a-fA-F]{1,4}😃{7,7}[0-9a-fA-F]{1,4} ([0-9a-fA-F]{1,4}😃{1,7}:
IPv6地址+端口 `^[(([0-9a-fA-F]{1,4}😃{7,7}[0-9a-fA-F]{1,4} ([0-9a-fA-F]{1,4}😃{1,7}:
子网掩码 `^(?:254 252
MAC地址 `^(?😦?:[a-f0-9A-F]{2}😃{5} (?:[a-f0-9A-F]{2}-){5})[a-f0-9A-F]{2}$`
Version版本号 ^\d+(?:\.\d+){2}$ 例如:12.1.1
图片后缀 `.(gif png
视频后缀 `.(swf avi
图片链接 `(?:https?😕/)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.+.(gif png
视频链接 `(?:https?😕/)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.+.(swf avi
迅雷链接 thunderx?:\/\/[a-zA-Z\d]+=
ed2k链接 ed2k:\/\/|file|.+|\/
磁力链接 magnet:\?xt=urn:btih:[0-9a-fA-F]{40,}.*

其他

描述 正则表达式 备注
Windows文件路径 ^[a-zA-Z]:(?:\\[\w\u4E00-\u9FA5\s]+)+[.\w\u4E00-\u9FA5\s]+$ 例如:C:\Users\Administrator\Desktop\a.txt
Windows文件夹路径 ^[a-zA-Z]:(?:\\[\w\u4E00-\u9FA5\s]+)+$ 例如:C:\Users\Administrator\Desktop
Linux文件路径 ^\/(?:[^/]+\/)*[^/]+$ 例如:/root/library/a.txt
Linux文件夹路径 ^\/(?:[^/]+\/)*$ 例如:/root/library/
MD5格式 `^(?:[a-f\d]{32} [A-F\d]{32})$`
BASE64格式 ^\s*data:(?:[a-z]+\/[a-z0-9-+.]+(?:;[a-z-]+=[a-z0-9-]+)?)?(?:;base64)?,([a-z0-9!$&',()*+;=\-._~:@/?%\s]*?)\s*$ 例如:data:image/jpeg;base64,xxxx==
UUID ^[a-f\d]{4}(?:[a-f\d]{4}-){4}[a-f\d]{12}$ 例如:94f9d45a-71b0-4b3c-b69d-20c4bc9c8fdd
16进制 ^[A-Fa-f0-9]+$ 例如:FFFFFF
16进制颜色 `^#?([0-9a-fA-F]{3} [0-9a-fA-F]{6})$`
SQL语句 `^(?:select drop
Java包名 ^(?:[a-zA-Z_]\w*)+(?:[.][a-zA-Z_]\w*)+$ 例如:com.r2coding.controller
文件扩展名 `.(?:doc pdf
HTML标签 <(\w+)[^>]*>(.*?<\/\1>)? 例如:<div class="navigator"></div>
HTML注释 <!--(.*?)--> 例如:<!--注释-->

示例

RegexPatterns.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public abstract class RegexPatterns {
/**
* 手机号正则
*/
public static final String PHONE_REGEX = "^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\\d{8}$";
/**
* 邮箱正则
*/
public static final String EMAIL_REGEX = "^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$";
/**
* 密码正则。4~32位的字母、数字、下划线
*/
public static final String PASSWORD_REGEX = "^\\w{4,32}$";
/**
* 验证码正则, 6位数字或字母
*/
public static final String VERIFY_CODE_REGEX = "^[a-zA-Z\\d]{6}$";

/**
* 用户名正则
*/
public static final String USER_NAME_REGEX= "[A-Za-z0-9_\\-\\u4e00-\\u9fa5]+";

/**
* 学号正则
*/
public static final String STUDENT_CODE_REGEX="^2012350101(?:0[1-9]|[1-2]\\d|3[0-2])$";
}

RegexUtils.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public class RegexUtils {
/**
* 是否是无效手机格式
*
* @param phone 要校验的手机号
* @return true:符合,false:不符合
*/
public static boolean isPhoneInvalid(String phone) {
return mismatch(phone, RegexPatterns.PHONE_REGEX);
}

/**
* 是否是无效邮箱格式
*
* @param email 要校验的邮箱
* @return true:符合,false:不符合
*/
public static boolean isEmailInvalid(String email) {
return mismatch(email, RegexPatterns.EMAIL_REGEX);
}

/**
* 是否是无效验证码格式
*
* @param code 要校验的验证码
* @return true:符合,false:不符合
*/
public static boolean isCodeInvalid(String code) {
return mismatch(code, RegexPatterns.VERIFY_CODE_REGEX);
}

/**
* 是否是无效账户格式
*
* @param code 要校验的账户名
* @return true:符合,false:不符合
*/
public static boolean isUserAccountInvalid(String code) {
return mismatch(code, RegexPatterns.USER_NAME_REGEX);
}

/**
* 是否是无效密码格式
*
* @param code 要校验的密码
* @return true:符合,false:不符合
*/
public static boolean isPasswordInvalid(String code) {
return mismatch(code, RegexPatterns.PASSWORD_REGEX);
}

// 校验是否不符合正则格式
private static boolean mismatch(String str, String regex) {
if (StrUtil.isBlank(str)) {
return true;
}
return !str.matches(regex);
}
}

  1. 京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 ↩︎

  2. 1-9 ↩︎

  3. 1-9 ↩︎

  4. 1-9 ↩︎