各种正则表达式

例子:

//核对手机号
function checkMobile(s){ 
var regu =/^0{0,1}(13[0-9]|15[0-9]|153|156|18[0-9]|151)[0-9]{8}$/;
var re = new RegExp(regu); 
if (re.test(s)) { 
return true; 
}else{ 
return false; 
} 
}
//核对手机号和固定电话
//--HuajianHsiu -2012-1-9
function checkTel(s){
var regu=/^0?([1-9]\d-\d{6,8}|[3-9][13579]\d-\d{5,8}|[3-9][24680]\d{2}-\d{6,8})$/;      //固定电话
var reg=/^0{0,1}(13[0-9]|15[0-9]|153|156|18[0-9]|151)[0-9]{8}$/;                     //手机号
var re = new RegExp(regu); 
var r = new RegExp(reg); 
if (re.test(s)||r.test(s)) { 
return true; 
}else{ 
return false; 
    } 
}

IPv4地址

正则表达式:

^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$

测试环境:Javascript/.Net/C++/JAVA

特点:匹配IPv4地址

IPv6地址

正则表达式:

^([\da-fA-F]{1,4}:){7}[\da-fA-F]{1,4}$

测试环境:Javascript/.Net/C++/JAVA

特点:支持IPv6的基本格式

IPv6地址

正则表达式:

^([\da-fA-F]{1,4}:){7}[\da-fA-F]{1,4}$|^:((:[\da-fA-F]{1,4}){1,6}|:)$|^[\da-fA-F]{1,4}:((:[\da-fA-F]{1,4}){1,5}|:)$|^([\da-fA-F]{1,4}:){2}((:[\da-fA-F]{1,4}){1,4}|:)$|^([\da-fA-F]{1,4}:){3}((:[\da-fA-F]{1,4}){1,3}|:)$|^([\da-fA-F]{1,4}:){4}((:[\da-fA-F]{1,4}){1,2}|:)$|^([\da-fA-F]{1,4}:){5}:([\da-fA-F]{1,4})?$|^([\da-fA-F]{1,4}:){6}:$

测试环境:Javascript/.Net/C++/JAVA

特点:支持压缩

IPv6地址

正则表达式:

^([\da-fA-F]{1,4}:){6}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^::([\da-fA-F]{1,4}:){0,4}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:):([\da-fA-F]{1,4}:){0,3}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){2}:([\da-fA-F]{1,4}:){0,2}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){3}:([\da-fA-F]{1,4}:){0,1}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){4}:((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$

测试环境:Javascript/.Net/C++/JAVA

特点:只支持IPv6/IPv4混合地址。前面IPv6部分支持压缩

IPv6地址

正则表达式:

^([\da-fA-F]{1,4}:){6}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^::([\da-fA-F]{1,4}:){0,4}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:):([\da-fA-F]{1,4}:){0,3}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){2}:([\da-fA-F]{1,4}:){0,2}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){3}:([\da-fA-F]{1,4}:){0,1}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){4}:((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){7}[\da-fA-F]{1,4}$|^:((:[\da-fA-F]{1,4}){1,6}|:)$|^[\da-fA-F]{1,4}:((:[\da-fA-F]{1,4}){1,5}|:)$|^([\da-fA-F]{1,4}:){2}((:[\da-fA-F]{1,4}){1,4}|:)$|^([\da-fA-F]{1,4}:){3}((:[\da-fA-F]{1,4}){1,3}|:)$|^([\da-fA-F]{1,4}:){4}((:[\da-fA-F]{1,4}){1,2}|:)$|^([\da-fA-F]{1,4}:){5}:([\da-fA-F]{1,4})?$|^([\da-fA-F]{1,4}:){6}:$

测试环境:Javascript/.Net/C++/JAVA

特点:支持所有格式的IPv6地址

分析:

IPv4:通常用点分十进制表示IP地址。IP地址长4个字节共32位,点分十进制将其分为4部分,中间用“.”号分开,所以每部分共8位,二进制为“00000000”到“11111111”,十进制为“0”到“255”。

IPv6:由128位(8*16),分8段,每段16位,段与段之间用“:”分开,用十六进制表示,格式FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF,IPv6地址可以压缩。

IPv4匹配:

0.0.0.0

255.255.255.255

192.168.1.1

0.0.0.1

01.1.1.1

5.025.25.25

IPv4不匹配:

111.111.111.256

IPv6匹配:

5e:0:0:0:0:0:5668:eeee

5e:0:0:023:0:0:5668:eeee

5e::5668:eeee

::1:8:8888:0:0:8

1::

::1:2:2:2

::

IPv6不匹配:

5e::5668::eeee

55555:5e:0:0:0:0:0:5668:eeee

IPv6/IPv4混合地址匹配:

11:11:e:1EEE:11:11:200.200.200.200

e:ee:5:e::0.0.0.254

::EfE:120.0.0.1

::120.0.0.1

ee:ee::11.11.11.125

------------------------------------------------------------------------

小数的正则表达式

------------------------------------------------------------------------

小数

正则表达式:

^([-+]?[1-9]\d*\.\d+|-?0\.\d*[1-9]\d*)$

测试环境:.NET/Javascript

分析:

不考滤科学计数法。

匹配:

0.012

0.000000005

-0.000000005

1.00001

-1.000000010

24.215

+2.25

1.0

不匹配:

0.0

0000.02

001.001

1.1.1

------------------------------------------------------------------------

E-mail地址的正则表达式

------------------------------------------------------------------------

E-mail地址

正则表达式:

^[a-zA-Z0-9]((?

测试环境:.NET/C++

特点:域名部分可以为IP地址,不考滤域名部分为主机名的情况,域名部分不能保证总长度在256字符以内。

分析:

E-mail地址分三部分:

第一部分:用户帐号。

第二部分:“@”符号(英文单词“at”的符号化)。

第三部分:域名或者IP地址。

您的邮箱名应该由a-Z、A-Z、0-9开头,邮箱名可由英文字母、0~9的数字、点、减号或下划线组成;邮箱名长度为3~18个字符;邮箱名不能以点、减号或下划线结尾,不能出现连续两个或两个以上的点、减号。

匹配:

[email protected]

[email protected]

[email protected]

[email protected]

不匹配:

adfd@hostname

[email protected]

[email protected]

[email protected]

------------------------------------------------------------------------

手机号码的正则表达式

------------------------------------------------------------------------

手机

正则表达式:

^((\+86)?|\(\+86\))0?1[358]\d{9}$

测试环境:.Net

分析:

手机号码长度11位,以1开头,第二位是3、5或者8(好像有了189开头的号码了)。

匹配:

13111111111

015111111111

+8613111111111

+8615111111111

+86015111111111

(+86)13111111111

不匹配:

11111111111

131111111

151111111111

------------------------------------------------------------------------

域名的正则表达式

------------------------------------------------------------------------

正则表达式:

^([0-9a-zA-Z][0-9a-zA-Z-]{0,62}\.)+([0-9a-zA-Z][0-9a-zA-Z-]{0,62})\.?$

测试环境:.NET/Javascript/C++

特点:无法保证全长在256字符以内。

分析:

一个完整的域名,由根域、顶级域、二级、三级……域名构成,每级域名之间用点分开,每级域名由字母、数字和减号构成(第一个字母不能是减号),不区分大小写,单个域长度不超过63,完整的域名全长不超过256个字符。在DNS系统中,全名是以一个点“.”来结束的,例如“www.nit.edu.cn.”。没有最后的那个点则表示一个相对地址。

匹配:

www.baidu.com

sd-.2222222.22222222222.222222222222222.22222222.222222222.dfsd.cslkd

不匹配:

sdlkk.ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd.cn

------------------------------------------------------------------------

固定电话的正则表达式

------------------------------------------------------------------------

区号:

^0?([1-9]\d|[3-9][13579]\d|[3-9][24680]\d{2})$

国家代码:+86

正则表达式:\+86

区号-市话号码如:10-11111111,010-11111111

正则表达式:

^0?([1-9]\d-\d{6,8}|[3-9][13579]\d-\d{6,7}|[3-9][24680]\d{2}-\d{6})$

区号-市话号码-分机如:10-11111111-111,010-11111111-111

正则表达式:

^0?([1-9]\d-\d{6,8}|[3-9][13579]\d-\d{6,7}|[3-9][24680]\d{2}-\d{6})(-\d{3})$

区号<这里是相连的>市话如:1011111111,01011111111

正则表达式:

^0?([1-9]\d\d{6,8}|[3-9][13579]\d\d{6,7}|[3-9][24680]\d{2}\d{6})$

所有格式:

^((\+86)?|\(\+86\)|\+86\s)0?([1-9]\d-?\d{6,8}|[3-9][13579]\d-?\d{6,7}|[3-9][24680]\d{2}-?\d{6})(-\d{3})?$

分析:

手机号码:11位,以1开头,第二位是3或者5。没考滤服务器的号码。

固定电话:总长10位,区号=10-4位,市话长度=10-N,可能还有3位分机号。开头的“0”不是区号部分,而是供长途直拔电话业务使用的字头。

手机:国家代码+手机号

电话:国家代码+区号+电话号码

原邮电部对此有如下规定:(1)北京、天津等区号两位的城市市话号码长度不大于8位,因为市话号码首位不能为1、0,最终容量可达八千万部。(2)各省会城市和大城市的区号三位,第一位选取“3、4、5、6、7、8、9”共七个数字,第二位选取单数“1、3、5、7、9”共五个数字,第三位随意。(3)各县城及小城市的区号四位,第一位选取“3、4、5、6、7、8、9”共七个数字,第二位选取双数“2、4、6、8、0”共五个数字,第三、四位随意。

匹配:

1334567890

031-3145678-123

010-11111111

(+86)010-13901691-123

不匹配:

+861678901

(+89)07912140337

------------------------------------------------------------------------

日期的正则表达式

------------------------------------------------------------------------

分析:

中国式日期为“年-月-日”

年:1到任意在于1的整数,不能“0”开头。

月:1到12。

日:1、3、5、7、8、10、12月有31天;4、6、9、11月有30天,闰年2月份有29天,否则28天。

闰年的条件是符合下面二者之一:

(1)能被4整除,但不能被100整除。

(2)能被4整除,又能被400整除。//缩写为能被400整除。

#00格式(#代表任何数),只要#能被4整除,#00就一定能被400整除(闰年)。

非#00格式(也就不能被100整除了),能被4整除。

第一年的2月份都有28天,只要是闰年还要加一天。现在的任务是找出闰年。

100以内能被4整除的有:

0004081216

2024283236

4044485256

6064687276

8084889296

他们的表达式为:(0?[048]|[2468][048]|[13579][26])

#00一定会被4整除,所以,只要#能被4整除,#00就一定能被400整除,他就是闰年。

#00格式闰年:

(\d*(0?[048]|[2468][048]|[13579][26])00)

因为不能为#00格式,所以要从上面的表中删除00这个结果。

非#00格式闰年:

(\d*(0?[48]|[2468][048]|[13579][26]))

把上面两个正则表达式合并

闰年:

(\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))

整数01-28:(2[0-8]|[01]\d)

整数01-30:(30|[012]\d)

整数01-31:(3[01]|[012]\d)

整数1-28:(2[0-8]|1\d|[1-9])

整数1-30:(30|[12]\d|[1-9])

整数1-31:(3[01]|[12]\d|[1-9])

把上面两组格式合并在一起:

整数1-28:(2[0-8]|1\d|0?[1-9])

整数1-30:(30|[12]\d|0?[1-9])

整数1-31:(3[01]|[12]\d|0?[1-9])

现在我们把它们全部组合成中国“年-月-日”格式

^((\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))-0?2-29)$|^[1-9]\d*-((0?[13578]|10|12)-(3[01]|[12]\d|0?[1-9])|(0?[469]|11)-(30|[12]\d|0?[1-9])|(0?2)-(2[0-8]|1\d|0?[1-9]))$

匹配:

1-1-1

244-02-29

10-10-10

2000-2-29

2008-2-29

不匹配:

2009-2-29

2009-13-10

1005-12-65

中国“年/月/日”格式

^((\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))\/0?2\/29)$|^[1-9]\d*\/((0?[13578]|10|12)\/(3[01]|[12]\d|0?[1-9])|(0?[469]|11)\/(30|[12]\d|0?[1-9])|(0?2)\/(2[0-8]|1\d|0?[1-9]))$

匹配:

1/1/1

244/02/29

10/10/10

2000/2/29

2008/2/23

不匹配:

2009/2/29

2009/13/10

1005/12/65

中国“年.月.日”格式

^((\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))\.0?2\.29)$|^[1-9]\d*\.((0?[13578]|10|12)\.(3[01]|[12]\d|0?[1-9])|(0?[469]|11)\.(30|[12]\d|0?[1-9])|(0?2)\.(2[0-8]|1\d|0?[1-9]))$

匹配:

1.1.1

244.02.29

10.10.10

2000.2.29

2008.2.23

不匹配:

2009.2.29

2009.13.10

1005/12/65

中国“年/月/日”、“年-月-日”、“年.月.日”格式

(^((\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))-0?2-29)$|^[1-9]\d*-((0?[13578]|10|12)-(3[01]|[12]\d|0?[1-9])|(0?[469]|11)-(30|[12]\d|0?[1-9])|(0?2)-(2[0-8]|1\d|0?[1-9]))$)|(^((\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))\/0?2\/29)$|^[1-9]\d*\/((0?[13578]|10|12)\/(3[01]|[12]\d|0?[1-9])|(0?[469]|11)\/(30|[12]\d|0?[1-9])|(0?2)\/(2[0-8]|1\d|0?[1-9]))$)|(^((\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))\.0?2\.29)$|^[1-9]\d*\.((0?[13578]|10|12)\.(3[01]|[12]\d|0?[1-9])|(0?[469]|11)\.(30|[12]\d|0?[1-9])|(0?2)\.(2[0-8]|1\d|0?[1-9]))$)

匹配:

1/1/1

244/02/29

10/10/10

2000/2/29

2008/2/29

244-02-29

10-10-10

2000-2-28

2008.2.29

不匹配:

1-1/1

2009/2/29

2009/13/10

1005/12/65

2009-2-29

2009-13-10

1005-12-65

中国“年月日”格式(用于身份证编码等),年由4位数表示,月2位,日2位

^(((0[048]|[2468][048]|[13579][26])00|\d\d(0[48]|[2468][048]|[13579][26]))0229)$|^\d{4}((0[13578]|10|12)(3[01]|[12]\d|0[1-9])|(0[469]|11)(30|[12]\d|0[1-9])|02(2[0-8]|1\d|0[1-9]))$

匹配:

19880329

20001220

20080229

不匹配:

1988329

20090229

20091310

10051265

欧美“月/日/年”格式

^(0?2\/29\/(\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26])))$|^((0?[13578]|10|12)\/(3[01]|[12]\d|0?[1-9])|(0?[469]|11)\/(30|[12]\d|0?[1-9])|(0?2)\/(2[0-8]|1\d|0?[1-9]))\/[1-9]\d*$

匹配:

1/1/1

02/29/244

10/10/10

02/29/2000

2/29/2008

不匹配:

2/29/2009

13/10/2009

12/65/1005

------------------------------------------------------------------------

时间的正则表达式

------------------------------------------------------------------------

时间

正则表达式:

^([01]?\d|2[123]):([0-4]?\d|5\d)(:([0-4]?\d|5\d)(\.\d+|-?0\.\d*[1-9]\d*)? )?(am|AM|pm|PM)?$

缺点:

分析:

时间格式:HH:mm:ss[am|pm|AM|PM]

HH:mm[am|pm|AM|PM]

HH在0-23之间,mm在0-59之间,ss是大于等于0小于60的小数或整数。

匹配:

1:1:1am

23:59:59.999

21:58

不匹配:

24:20:20

------------------------------------------------------------------------

身份证号码的正则表达式

------------------------------------------------------------------------

国内的身份证号码

正则表达式:

(^\d{6}((0[48]|[2468][048]|[13579][26])0229|\d\d(0[13578]|10|12)(3[01]|[12]\d|0[1-9])|(0[469]|11)(30|[12]\d|0[1-9])|(02)(2[0-8]|1\d|0[1-9]))\d{3}$)|(^\d{6}((2000|(19|21)(0[48]|[2468][048]|[13579][26]))0229|(((20|19)\d\d)|2100)(0[13578]|10|12)(3[01]|[12]\d|0[1-9])|(0[469]|11)(30|[12]\d|0[1-9])|(02)(2[0-8]|1\d|0[1-9]))\d{3}[\dX]$)

一代身份证号码:

^\d{6}((0[48]|[2468][048]|[13579][26])0229|\d\d(0[13578]|10|12)(3[01]|[12]\d|0[1-9])|(0[469]|11)(30|[12]\d|0[1-9])|(02)(2[0-8]|1\d|0[1-9]))\d{3}$

二代身份证号码:

^\d{6}((2000|(19|21)(0[48]|[2468][048]|[13579][26]))0229|(((20|19)\d\d)|2100)(0[13578]|10|12)(3[01]|[12]\d|0[1-9])|(0[469]|11)(30|[12]\d|0[1-9])|(02)(2[0-8]|1\d|0[1-9]))\d{3}[\dX]$

测试环境:C++/.NET/JAVA/Javascript

属性:多行模式,大小写敏感

特点:不能验证二代身份证校验码位的正确性。

分析:

一代15位身份证号码:六位数字地址码,第7、8位为出生年份(两位数),第9、10位为出生月份,第11、12位代表出生日期,第15位代表性别,奇数为男,偶数为女。

二代18位身份证号码:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

生日期码(身份证第七位到第十四位)表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。例如:1981年05月11日就用19810511表示。

顺序码(身份证第十五位到十七位)为同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。其中第十七位奇数分给男性,偶数分给女性。

校验码(身份证最后一位)是根据前面十七位数字码,按照ISO7064:1983.MOD11-2校验码计算出来的检验码。

1984年8月30日我国颁发了第一批身份证(一代身份证),可由此

假设1.持有身份证的人中最老的在1900年出生。

假设2.一代身份证持有人在1900-2010年间出生。

假设3.二代身份证持有人在1900-2100年间出生。

1900-2100年间

闰年:(2000|(19|21)(0[48]|[2468][048]|[13579][26]))

平年:(19|21)(0?[1235679]|[2468][1235679]|[13579][01345789])

匹配:

34052419800229001X

340524800229001

340524199001010013

不匹配:

34052419800101001a

21552418801010011

340524850229001

34052422800110081X

34052419800229001x

相关推荐