详解正则表达式之数字验证正则表达式

1.验证只包含数字、指定长度(N)的字符串

比如我要验证只包含数字,长度为6的字符串,如123456,则可以使用下面几种效果相同的验证方式

复制代码代码如下:\d{6}[0-9]{6}\d\d\d\d\d\d

上述几种方式效果相同,更推荐第一种,它更加简洁!注:后面我都会使用较为简洁的正则表达式,而不会太过啰嗦!

2.验证只包含数字、指定范围长度(N-M)的单词字符串

比如我要验证只包含数字,长度在5到8之间的字符串,如12345,123456,1234567,12345678,则可以使用的验证方式

3.非负整数的验证

显然0,100,56等都是非负整数,而-12,0135等都不是非负整数,验证演示如下:

我们可以看到021-56由于不是正数,不会被选中。(注意:其中用到了^,表示必须以0或者[1-9]开头,因此-56没有被选中;如果没有^,那么-56中的56会被选中)

4.任意整数的验证

任意整数即如0,456,-65等等这是任意整数,也就是说我们需要把正数和非负整数结合起来,验证演示如下:

于是所有的正数包括0、正整数和负整数都匹配了。

5.指定范围内的正整数的验证

比如说我们希望验证1-5678区间内的正整数,如465,23,5677等都属于这个范围,这该怎么验证呢?别着急,我们可以分区间验证:

综上所述,我们可以使用如下正则表达式来验证1-5678之间的所有正整数:

复制代码代码如下:^([1-9]\d{0,2})|([1-4]\d{3})|(5[0-5]\d{2})|(56[0-6]\d)|(567[0-8])$

但果真是这样吗?验证如下:

怎么成这样了呢???后面的三个数的验证都不是我们想要的效果啊!!这是因为正则表达式在匹配时会从左向右匹配,其中2602和4999因为使用[1-9]\d{0,2}可以完成匹配,所以就无需继续了。

我们把正则表达式的顺序倒过来试试?如下所示:

复制代码代码如下:^(567[0-8])|(56[0-6]\d)|(5[0-5]\d{2})|([1-4]\d{3})|([1-9]\d{0,2})$

效果如下:

这次令我们高兴的是在1-5678之间的数都被选上了!!但789和-5中的5被选上了。这是因为我们只在第一个分组前添加了^,我们需要做的是每个分组前都添加^。如下所示:

复制代码代码如下:^(567[0-8])|^(56[0-6]\d)|^(5[0-5]\d{2})|^([1-4]\d{3})|^([1-9]\d{0,2})$

这次效果就没有问题了,如下:

由此可知:组合顺序原则(正整数):依次从最大值的范围组合到最小值的范围组合。

从这个例子受到启发,我们对于指定范围内的正整数的验证的第一个例子中的每一个分组后添加$或\b也可以解决问题。

也就是说下面的两行代码均有效:

复制代码代码如下:^(567[0-8])|^(56[0-6]\d)|^(5[0-5]\d{2})|^([1-4]\d{3})|^([1-9]\d{0,2})$^([1-9]\d{0,2})$|([1-4]\d{3})$|(5[0-5]\d{2})$|(56[0-6]\d)$|(567[0-8])$

6.实数的验证

这里要介绍的实数的验证是至少包含一个小数点的实数,因此实数就包括了整数部分、小数部分和小数点。

验证方法如下:

如果我们希望验证指定精度的实数,我们只需要把末尾的+修改成相应的精度即可,如下所示:

即表示小数部分长度为3的实数。

7.科学计数法的验证

科学计数法就是把一个数记成a*10^n的形式。其中,a是一位整数或着是只有一位整数的小数(如5,3.2等等),所以可知1<=|a|<10。而n是一位整数。所以不难得出科学计数法的验证方法如下所示:

1.手机号码

下面我们按照顺序逐一介绍

目前国内的手机号码多是13开头、15开头和18开头,并且第三位数字目前都有【0-9】这10个数,所以验证起来就很简单了。如下所示:

显然第二种方法更简单一些。

我们可以把2268001-2268999划分为2268001-2268009和2268010-2268099和2268100-2268999。这样,把验证三者的正则表达式组合起来即可。如下所示:

复制代码代码如下:2268((00[1-9])|(0[1-9]\d)|([1-9]\d{2}))

PS这里就不具体介绍啦,都是很简单的知识,如果有疑问可以看我的上一篇博文,它对基本知识阐述得很具体。

演示效果如下:

下面我们以4位的分级号码为例。一般在分机号码之前可能是空格,也可能是-(连字符),还可能什么都没有。于是验证方法如下:

第三部分:2种身份证号码的验证

1.基本知识

15位身份证号码:

1985年我国实行居民身份证制度,当时签发的身份证号码是15位的。其中前6位为地址码,中间6位为出生日期码(年月日各用两位数字表示),最后三位为顺序码。

(注:顺序码是对同年、同月、同日出生的人编订序号,顺序码的奇数分配给男性,偶数分配给女性)

18位身份证号码:

1999年我国开始使用18位的身份证号。其中前6位为地址码,中间8位为出生日期码(年用4位表示,月日各用2位表示),最后四位为顺序码和校验码。

(注:年份用4位是因为使用2位会导致冲突,比如1903年和2003年出生的人。而校验码主要是为了校验计算机输入公民身份证号码的前17位数字是否正确,其取值范围是0至10,当值等于10时,用X表示)

2.15位身份证号码的验证

前6位地址码可以为任意数字,78位的年份码为任意数字,9和10位的月份码应当在01-12之间,11和12位的日期码在01-31之间,最后三位的顺序码为长度为3的任意字符串。于是验证方法如下:

复制代码代码如下:\b\d{8}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}\b

3.18位身份证号码的验证

前6位地址码为任意数字,7-10位的年份码前两位以19或20开头(这里就不考虑18开头了),月日同15位的身份证号码,三位顺序码为长度为3的任意字符串,最后以为验证码为0-9或X。于是验证方法如下:

\b\d{6}(19|20)\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)\b因为只要知道了思路,正则表达式写出来并不难,所以这里就不细讲了。

第四部分:邮政编码验证

我国邮政编码的编码规则:我国采用四级六位编码制,前两位表示省、市、自治区,第三位代表邮区,第四位代表县、市,最后两位代表投递邮局,最后两位是代表从这个城市哪个投递区投递的,即投递区的位置。例如:邮政编码“130021”“13”代表吉林省,“00”代表省会长春,“21”代表所在投递区。

因此验证我国的邮政编码就十分方便了,如下所示:

第五部分:两种IP地址的验证

IP地址可以简单验证,还可以精确验证。

1.简单IP地址验证

([1-9]\d{0,2}\.){3}[1-9]\d{0,2}验证效果如下所示:

2.精确IP地址验证

显然,上面的简单IP地址验证是不精确的,比如999.999.999.999这就不是一个正确的IP地址。

我们知道32位IP地址的每一个数值都是在0~255之间,所以对于1~3位整数.1~3位整数.1~3位整数.1~3位整数我们应该将整数限制在0~255之间,显然,这里要使用分区间的方法了。

100-199之间可以这样表示:1\d{2}

200-249之间可以这样表示:2[0-4]\d

250-255之间可以这样表示:25[0-5]

于是综上所述,可以得到精确IP地址验证的方法如下:

复制代码代码如下:(((25[0-5])|2[0-4]\d|1\d{2}|[1-9]\d|0)\.){3}((25[0-5])|2[0-4]\d|1\d{2}|[1-9]\d|0)

值得注意的是:分组是至关重要的,只有分对了组,才有可能不出问题。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

THE END
1.身份证18位数字分别代表什么视频原标题:身份证18位数字分别代表什么 身份证号码是每一个公民唯一的、终身不变的身份代码。这个号码一共有18位数字,这18位数字有个排序的规则,就是“地址码+出生日期码+顺序码+校验码”。生活中,还有一部分人身份证最后一位是字母,这是为什么呢?另外,按照《中华人民共和国居民身份证法》规定,居民身份证按年龄区https://www.workercn.cn/c/2024-11-27/8401707.shtml
2.身份证号码上隐藏着的信息,你读懂了吗?18位身份证号码都有哪些不同含义? 来一起看看吧 ↓↓↓ 图片来源:人民日报微博 1-2位为省、自治区、直辖市代码; 3-4位为地级市、盟、自治州代码; 5-6位为县、县级市、区代码; 7-14位为出生年月日,比如19670401代表1967年4月1日出生; 15-17位为顺序码,是同一地址码所标示的区域范围内,对同年同月http://www.baokang.gov.cn/xxgk/xxgkml/jczwgk/hjglly/t_3349543.shtml
3.涨知识身份证后4位数还有这么重要的含义!第3和第4位代表的是城市代码 第5和第6位代表的是区县代码 7-14位代表的是出生年月日 15和16位代表的是所在地派出所的代码 第17位代表的是性别,奇数是男性,偶数是女性 最后一位是校验码,有的人身份证是0-9的其中一个数字,也有的人是一个X,其实X代表的是数字10,由于直接用10来做尾号,身份证号码会变成https://www.cbbn.net/folder34/folder131/folder134/2021-04-06/qnWWhRKNuzdojjjl.html
4.身份证号每一位号码的意义身份证每一位各个地区的省份编号都是从1(第二位)开始的,只有重庆是个例外,显然是因为重庆是1997年才从四川分离,加入直辖市小家庭的。如果未来的一天,你见到一张前两位为40的身份证,那么不用说,中南地区又新设了一个直辖市。 第3、4和5、6位 3、4:所在城市,比如西安市的代码:01 https://blog.csdn.net/lanchunhui/article/details/50612691
5.公民身份证(18位的)前3位数字表示什么,第4位到第6位又表示什么?身份证号前六位是地区码,就是各县市区的行政区划代码。比如前六位是130503,13表示河北省,1305表示河北https://iask.sina.com.cn/b/1H3manKd1AkX.html
6.2024港澳台居民申请大陆身份证攻略(最新政策+条件+流程+时间+材料最后一位为校验码。 身份证号码是由18位数字组成,分别表示: 第1、2位数字表示:所在省份的代码; 第3、4位数字表示:所在城市的代码; 第5、6位数字表示:所在区县的代码; 第7-14位数字表示:出生年、月、日(其中7、8、9、10位是年,11、12位是月,13、14位是日); https://www.extrabux.cn/chs/guide/7564945
7.身份证的前六位数字代表地址信息还是出生日期蚂蚁庄园今日答题1月4日 1.身份证的前六位数字代表什么信息? 地址信息 出生日期 2.正确答案:地址信息 3.答案解析: 身份证号码前6位代表的是持证人的地址,第一位、第二位表示省或直辖市或自治区;第三位、第四位代表市辖区;第五位、第六位代表区、县、市等。https://m.ali213.net/news/gl2301/982615.html
8.基于身份证号的数据分析根据身份证号身份证号共18位: 第1~2位:省份 第3~4位:市 第5~6位:区 第7~10位:出生年 第11~12位:出生月 第13~14位:出生日 第15~17位:顺序号 第18位:校验码 其中第18位校验码的计算方式: (1) 前17位按照位置各自乘以[7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]。 (https://blog.51cto.com/u_16099248/9181639
9.上海市中小学学生学籍号编制规则3.中国澳门学生:以澳门特区身份证号为学籍主号; 4.中国台湾学生:以台湾居民来往大陆通行证编号为学籍主号; 5.外籍学生:以有效护照编号为学籍主号; 6.其他学生,实行统一编号。具体含义如下: 二、学籍副号的编制规则 本市中小学生学籍副号编码由6部分共19位数字代码组成,具体编制规则如下: http://www.ps.edu.sh.cn/info/1041/4929.htm