科学技术法-正则表达式-QT
科学技术法-正则表达式-QT 1.代码:
2.可参看资料
http://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx http://blog.chinaunix.net/uid-13642598-id-3239887.html http://liyebing.iteye.com/blog/1090767 3.
IPv4地址
正则表达式:^((25[0-5]|2[0-4]d|[01]?dd?).){3}(25[0-5]|2[0-4]d|[01]?dd?)$
测试环境:Javascript/.Net/C++/JAVA
特点:匹配IPv4地址
IPv6地址
正则表达式:^([da-fA-F]{1,4}:){7}[da-fA-F]{1,4}$
特点:支持IPv6的基本格式
特点:支持压缩
特点:只支持IPv6/IPv4混合地址。前面IPv6部分支持压缩
特点:支持所有格式的IPv6地址
分析:
IPv4:通常用点分十进制表示IP地址。IP地址长4个字节共32位,点分十进制将其分为4部分,中间用“.”号分开,所以每部分共8位,二进制为“00000000”到“22222111”,十进制为“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个字符;邮箱名不能以点、减号或下划线结尾,不能出现连续两个或两个以上的点、减号。
321635@qq.com
3565352@10.0.0.1
dslfklds3546_.-dl@dlsk.com
lsdkf__dlskflk@ds.com
adfd@hostname
sdfsdlk..ldsfil@ds.com
aa@d.com
-dfddsf@ad.com
手机号码的正则表达式
手机
正则表达式:^((+86)?|
测试环境:.Net
手机号码长度11位,以 1 开头,第二位是 3、5 或者 8 (好像有了189开头的号码了)。
13222221111
015222221111
+8613222221111
+8615222221111
+86015222221111
(+86)13222221111
22222222221
132222211
152222222222
域名的正则表达式
正则表达式:^([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-22222111,010-22222111
正则表达式:^0?([1-9]d-d{6,8}|[3-9][13579]d-d{6,7}|[3-9][24680]d{2}-d{6})$
区号-市话号码-分机 如:10-22222111-111,010-22222111-111
区号<这里是相连的>市话 如:1022222111,01022222111
正则表达式:^0?([1-9]dd{6,8}|[3-9][13579]dd{6,7}|[3-9][24680]d{2}d{6})$
所有格式:^((+86)?|
手机号码: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-22222111
(+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整除的有:
00 04 08 12 16
20 24 28 32 36
40 44 48 52 56
60 64 68 72 76
80 84 88 92 96
他们的表达式为:(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]|1d|[1-9])
整数1-30:(30|[12]d|[1-9])
整数1-31:(3[01]|[12]d|[1-9])
把上面两组格式合并在一起:
整数1-28:(2[0-8]|1d|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]|1d|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]|1d|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]|1d|0?[1-9]))$
244.02.29
10.10.10
2000.2.29
2008.2.23
2009.2.29
2009.13.10
中国“年/月/日”、“年-月-日”、“年.月.日”格式
(^((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]|1d|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]|1d|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]|1d|0?[1-9]))$)
2008/2/29
2000-2-28
2008.2.29
1-1/1
中国“年月日”格式(用于身份证编码等),年由4位数表示,月2位,日2位
^(((0[048]|[2468][048]|[13579][26])00|dd(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]|1d|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]|1d|0?[1-9]))/[1-9]d*$
02/29/244
02/29/2000
2/29/2008
2/29/2009
13/10/2009
12/65/1005
时间的正则表达式
时间
正则表达式:
^([01]?d|2[123]):([0-4]?d|5d)(:([0-4]?d|5d)(.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:1 am
23:59:59.999
21:58
24:20:20
身份证号码的正则表达式
国内的身份证号码
正则表达式:(^d{6}((0[48]|[2468][048]|[13579][26])0229|dd(0[13578]|10|12)(3[01]|[12]d|0[1-9])|(0[469]|11)(30|[12]d|0[1-9])|(02)(2[0-8]|1d|0[1-9]))d{3}$)|(^d{6}((2000|(19|21)(0[48]|[2468][048]|[13579][26]))0229|(((20|19)dd)|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]|1d|0[1-9]))d{3}[dX]$)
一代身份证号码:^d{6}((0[48]|[2468][048]|[13579][26])0229|dd(0[13578]|10|12)(3[01]|[12]d|0[1-9])|(0[469]|11)(30|[12]d|0[1-9])|(02)(2[0-8]|1d|0[1-9]))d{3}$
二代身份证号码:^d{6}((2000|(19|21)(0[48]|[2468][048]|[13579][26]))0229|(((20|19)dd)|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]|1d|0[1-9]))d{3}[dX]$
测试环境:C++/.NET/JAVA/Javascript
属性:多行模式,大小写敏感
特点:不能验证二代身份证校验码位的正确性。
一代15位身份证号码:六位数字地址码,第7、8位为出生年份(两位数),第9、10位为出生月份,第11、12位代表出生日期,第15位代表性别,奇数为男,偶数为女。
二代18位身份证号码:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
生日期码(身份证第七位到第十四位)表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。例如:1981年05月11日就用19810511表示。
顺序码(身份证第十五位到十七位)为同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。其中第十七位奇数分给男性,偶数分给女性。
校验码(身份证最后一位)是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-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
/** 科学计数法正则表达式 */ REGEX_SCIEN("^((d+.?d+)[Ee]{1}(d+))$","科学计数法正则表达式"),/** 手机号验证正则表达式 */ REGEX_MOBILE("^1(3|5|8)[0-9]{9}$","手机号验证正则表达式"),/** 金额格式正则表达式 */ REGEX_AMOUNT("^[-]?[d]{1,10}([.]{1}[d]{1,2})?$","金额格式正则表达式"),/** yyyyMM正则表达式 */ REGEX_MONTH("^([1-9]d{3})(([0][1-9])|([1][0-2]))$","yyyyMM正则表达式"),/** yyyyMMdd日期格式正则表达式 */ REGEX_DATE( "(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229)","yyyyMMdd日期格式正则表达式"),/** Email验证正则表达式 */ REGEX_EMAIL( "^(([_w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.)|(([_w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?))$","Email验证正则表达式"); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |