正则表达式是一种强大的文本处理工具,它能够帮助我们匹配、查找、替换复杂文本模式。正则表达式的设计灵感来源于自动机理论和形式语言理论。它通常用于文本搜索、文本编辑以及字符串处理的程序中。
常用的正则表达式符号:
-
^
:匹配输入字符串的开始位置。 -
$
:匹配输入字符串的结束位置。 -
.
:匹配除换行符之外的任意单个字符。 -
*
:匹配前面的子表达式零次或多次。 -
+
:匹配前面的子表达式一次或多次。 -
?
:匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。 -
{n}
:n 是一个非负整数,匹配确定的 n 次。 -
{n,}
:至少匹配 n 次。 -
{n,m}
:至少匹配 n 次且不超过 m 次。 -
[xyz]
:字符集合,匹配所包含的任意一个字符。 -
[^xyz]
:负值字符集合,匹配未包含的任意字符。 -
(a|b)
:匹配 a 或 b。 -
\d
:匹配一个数字字符。等价于[0-9]
。 -
\w
:匹配包括下划线的任何单词字符。等价于[A-Za-z0-9_]
。
常见的正则表达式:
校验数字的表达式
-
整数:
^-?\d+$
-
^
:匹配输入字符串的开始位置。 -
-?
:可选的负号,表示可能有或没有负号。 -
\d+
:匹配一个或多个数字。 -
$
:匹配输入字符串的结束位置。
这个表达式会匹配任意正整数或负整数,不包括小数。
-
-
非负整数(包括零):
^\d+$
-
^
:匹配输入字符串的开始位置。 -
\d+
:匹配一个或多个数字。 -
$
:匹配输入字符串的结束位置。
这个表达式匹配任意非负整数,不包括小数。
-
-
正整数:
^[1-9]\d*$
-
^
:匹配输入字符串的开始位置。 -
[1-9]
:匹配 1 到 9 的任意数字,排除了零。 -
\d*
:匹配零个或多个数字。 -
$
:匹配输入字符串的结束位置。
这个表达式将匹配任意正整数,不包括零。
-
-
非正整数(包括零):
^-[1-9]\d*|0$
-
^
:匹配输入字符串的开始位置。 -
-
:负号,表示负数。 -
[1-9]
:匹配 1 到 9 的任意数字。 -
\d*
:匹配零个或多个数字。 -
|
:逻辑或运算符,表示满足左侧或右侧表达式即可。 -
0$
:匹配数字0。
这个表达式将匹配所有负整数以及零。
-
-
浮点数:
^-?\d+(\.\d+)?$
-
^
:匹配输入字符串的开始位置。 -
-?
:可选的负号,表示可能有或没有负号。 -
\d+
:匹配一个或多个数字,代表整数部分。 -
(\.\d+)?
:可选的小数部分,如果有小数的话必须以小数点开始,后面跟着一个或多个数字。 -
$
:匹配输入字符串的结束位置。
这个表达式会匹配任意正浮点数或负浮点数,也包括整数。
-
数字:^[0-9]*$ 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})?$ 正数、负数、和小数:^(-|+)?\d+(.\d+)?$ 有两位小数的正实数:^[0-9]+(.[0-9]{2})?$ 有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$ 非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^+?[1-9][0-9]*$ 非零的负整数:^-[1-9][]0-9"*$ 或 ^-[1-9]\d*$ 非负整数:^\d+$ 或 ^[1-9]\d*|0$ 非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$ 非负浮点数:^\d+(.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ 非正浮点数:^((-\d+(.\d+)?)|(0+(.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ 正浮点数:^[1-9]\d*.\d*|0.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$ 负浮点数:^-([1-9]\d*.\d*|0.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$ 浮点数:^(-?\d+)(.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$
校验字符的表达式
-
字母(不区分大小写):
^[A-Za-z]+$
-
^
:定位在字符串开始的位置。 -
[A-Za-z]
:匹配任意大小写字母。 -
+
:前面的模式出现一次或多次。 -
$
:定位在字符串结束的位置。
这个表达式校验字符串是否只包含字母。
-
-
小写字母:
^[a-z]+$
-
^
:定位在字符串开始的位置。 -
[a-z]
:匹配任意小写字母。 -
+
:前面的模式出现一次或多次。 -
$
:定位在字符串结束的位置。
仅校验字符串中是否只包含小写字母。
-
-
大写字母:
^[A-Z]+$
-
^
:定位在字符串开始的位置。 -
[A-Z]
:匹配任意大写字母。 -
+
:前面的模式出现一次或多次。 -
$
:定位在字符串结束的位置。
仅校验字符串中是否只包含大写字母。
-
-
字母和数字组合:
^[A-Za-z0-9]+$
-
^
:定位在字符串开始的位置。 -
[A-Za-z0-9]
:匹配任意大小写字母或数字。 -
+
:前面的模式出现一次或多次。 -
$
:定位在字符串结束的位置。
校验字符串是否只含有字母和数字。
-
-
中文字符:
^[\u4e00-\u9fa5]+$
-
^
:定位在字符串开始的位置。 -
[\u4e00-\u9fa5]
:Unicode码范围,匹配任意中文字符。 -
+
:前面的模式出现一次或多次。 -
$
:定位在字符串结束的位置。
专门用于校验字符串是否只包含中文字符。
-
-
特定字符集合:
^[abc]+$
-
^
:定位在字符串开始的位置。 -
[abc]
:匹配'a'、'b'或'c'。 -
+
:前面的模式出现一次或多次。 -
$
:定位在字符串结束的位置。
校验字符串是否只由 'a'、'b'、'c' 组成。
-
汉字:^[\u4e00-\u9fa5]{0,}$ 英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$ 长度为3-20的所有字符:^.{3,20}$ 由26个英文字母组成的字符串:^[A-Za-z]+$ 由26个大写英文字母组成的字符串:^[A-Z]+$ 由26个小写英文字母组成的字符串:^[a-z]+$ 由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$ 由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$ 中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$ 中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$ 可以输入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+ 12 禁止输入含有~的字符:[^~\x22]+
特殊需求表达式
-
校验邮箱地址:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
-
利用
+
确保前面的字符(字母、数字、点、百分号、加号、减号)出现一次或多次。 -
@
符号为邮箱地址特有。 -
点之后是域名,可以包含字母、数字和减号。
-
域名后面的点和两到四个字母代表顶级域名。
-
-
校验IPv4地址:
^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
-
每个括号内的模式校验0到255的数字,考虑到了特殊情况,例如数字前面可能有一个或两个前导0。
-
\.
是用于分隔IP地址中各个数字的点(需要转义)。 -
{3}
确保这样的模式重复三次,后面跟着一个相同的数字模式。
-
-
校验日期(YYYY-MM-DD格式):
^(19|20)\d\d[-](0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])$
-
开头两位是19或20,后面是两位任意数字,代表年份。
-
随后是一个短横线,然后是01至12范围的月份。
-
最后是日期部分,可以是01到31。
-
-
校验特定长度和字符的字符串(例如:8位的字母和数字):
^[a-zA-Z0-9]{8}$
-
只允许字母和数字的组合。
-
{8}
确保字符串长度为8。
-
Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$ 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.? InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ 手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$ 电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$ 国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7} 身份证号(15位、18位数字):^\d{15}|\d{18}$ 短身份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$ 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$ 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$ 日期格式:^\d{4}-\d{1,2}-\d{1,2} 一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$ 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$ xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$ 空白行的正则表达式:\n\s*\r (可以用来删除空白行) 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始) 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)