这篇博文将介绍一些常用的数字验证方法,包括整数验证、国内电话号码验证、身份证号码验证、IP地址验证等。如果你对基本概念还不够了解,可以先看看我的博文。
第一部分:数值验证
1.验证只有数字和指定长度(n)的字符串
例如,如果我想验证一个只有数字且长度为6的字符串,如123456,我可以使用以下具有相同效果的验证方法
复制代码如下: d {6} [0-9] {6} d d d d d
以上方法效果相同,但推荐第一种,更简洁!注意:以后我会用简洁的正则表达式,不会太啰嗦!
2.验证仅包含数字和指定范围长度(N-M)的单词串
例如,如果我想验证一个只包含数字并且长度在5到8之间的字符串,如12345,123456,1234567,12345678,我可以使用验证方法
3.非负整数的验证
很明显,0,100,56等等。都是非负整数,而-12,0135等。都是非负整数。验证演示如下:
我们可以看到021 -56不会被选中,因为它不是正数。(注意:使用“0”,表示必须以0或[1-9]开头,所以不选择-56。如果没有,则选择-56中的56)
4.任意整数的验证
任何整数,如0,456,-65等。这是任意整数,也就是说,我们需要把正数和非负数结合起来。验证演示如下:
所以所有的正数包括0,正整数和负整数都匹配。
5.指定范围内正整数的验证
例如,我们想验证1-5678范围内的正整数,如465,23,5677等。属于这个范围。我们如何验证这一点?别担心,我们可以在分区之间进行验证:
使用b[1-9]d{0-2}b验证1-999和b[1-4]d{3}之间的所有正整数。使用[0-5] d {2} B567[0-8]b验证5670和5678之间的所有正整数。总而言之,我们可以使用以下正则表达式来验证1到5678之间的所有正整数:
复制代码如下: ([1-9] d {0,2 })|([1-4] d { 3 })|(5[0-5] d { 2 })|(56[0-6] d)|(56)
但事实真的是这样吗?验证如下:
这是怎么发生的?最后三个数字的验证不是我们想要的!这是因为正则表达式匹配时会从左到右匹配,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 { 3 })
效果如下:
这次让我们开心的是1-5678之间的数字都被选中了!但是789和-5中有5个被选中。这是因为我们只在第一个分组之前添加了0,我们需要做的是在每个分组之前添加0。如下图所示:
复制代码如下:(567[0-8])|(56[0-6] d)|(5[0-5] d { 2 })|([1-4] d { 3 })|([1]
这种效果没有问题,如下所示:
可以看出组合顺序原则(正整数):从最大值的区间组合到最小值的区间组合依次进行。
受这个例子的启发,我们可以通过在第一个验证指定范围内的正整数的例子中的每一组后面加上$或b来解决这个问题。
也就是说,以下两行代码是有效的:
复制代码如下:(567[0-8])|(56[0-6] d)|(5[0-5] d { 2 })|([1-4] d { 3 })|([1]
6.实数的验证
这里介绍的实数的验证是一个至少包含一个小数点的实数,所以实数包括整数部分、小数部分和小数点。
验证方法如下:
复制代码如下:-?(0 |([1-9] d *)。d
其中-?它表示可能有也可能没有负号,(0|[1-9]d*)表示整数部分可以是0或其他不以0开头的整数。是转义元字符。而d表示小数点后可以重复一个或多个数字。因此可以用来验证一般形式的实数(如0.0,1.2,-1.20等。),也可用于校验负零,如-0.0、-0.00等。
如果要验证指定精度的实数,只需将末尾的一个修改为对应的精度即可,如下图:
复制代码如下:-?(0 |([1-9] d *)。d{3}$
即表示长度为3的小数部分的实数。
7.科学计数方法的验证
科学的计数方法是以* 10 n的形式记录一个数字,其中a是整数或只有一个整数的小数(如5,3.2等。),可以知道1=|a|10。n是一位整数。因此,不难得出科学计数法的验证方法如下:
复制代码如下:-?[1-9](.d)?*10^-?d $
第二部分:四个国内电话号码的验证
我们知道在中国电话号码有四种形式:
1.手机号码
2.固定电话号码(不包括区号)
3.区号固定电话号码
4.区号、固定电话号码、分机号码
让我们按顺序逐一介绍
1.手机号码
目前国内手机号码大多以13、15、18开头,第三位数字有10个数字[0-9],验证起来非常简单。如下图所示:
显然,第二种方法更简单。
2.固定电话号码(不包括区号)
固定电话号码通常是7位(如2268358)或8位(82668110),所以验证起来非常简单,如下图:
但是某个地区的电话号码往往固定在特定的范围内,比如新疆石河子某个地区的2268001-2268999,确定起来需要一点功夫。
我们可以把2268001-2268999分成2268001-2268009、2268010-2268099和2268100-2268999。这样,用于验证三者的正则表达式就可以组合起来。如下图所示:
复制代码如下:2268((00[1-9])|(0[1-9] d)|([1-9] d { 2 }))
效果如下:
PS这里就不具体介绍了。这是非常简单的知识。有问题可以看我上一篇博文,把基础知识解释的很具体。
3.验证区号和固定电话号码
区号长度一般为3-4位,固定电话号码长度一般为7-8位。比如029-82668110是3位区号和8位固定电话号码的组合,0993-2268358是4位区号和7位固定电话号码的组合。区号和固定号码通常用-(连字符)连接。我们只需要分别验证区号和固定电话。
复制代码如下:b0d{2,3}[-]?d{7,8}b
示范效果如下:
4.区号固定电话号码验证分机号码验证
一些大公司、企业或政府部门对外提供固定电话号码,除了区号和固定电话号码外,可能还包括分机号码。
让我们以4位数的分类号码为例。通常,分机号码前面可以有一个空格,-(连字符),或者什么都没有。验证方法如下:
复制代码如下:b0d{2,3}[-]?d{7,8}[- ]?d{4}b
示范效果如下:
第三部分:两个身份证号码的验证
1.基础知识
15位身份证号码:
1985年我国实行居民身份证制度,当时发放的身份证号码是15位数字。前六位是地址码,中间六位是出生日期码(每年的年、月、日用两位数表示),最后三位是序列码。
(注:序列码是同一年、同月、同日出生的人的序号。序列号的奇数被分配给男性,偶数被分配给女性)
18位身份证号码:
1999年,中国开始使用18位的身份证号码。前6位是地址码,中间8位是出生日期码(年用4位表示,月和日用2位表示),最后4位是序列码和校验码。
(注:年份用4位数,因为用2位数会导致冲突,比如1903年和2003年出生的人。校验码主要是检查计算机输入的公民身份证号码的前17位数字是否正确,其取值范围为0到10。当该值等于10时,用X表示)
2.15位身份证号码的验证
前六位地址码可以是任意数字,第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位身份证号码验证
前六位地址码为任意数字,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
第四部分:邮政编码验证
我国采用四级六位数编码体系,前两个代表省、市、自治区,第三个代表邮区,第四个代表县市,最后两个代表投递邮局,最后两个代表本市哪个投递区投递,即投递区的位置。比如:邮政编码“130021”“13”代表吉林省,“00”代表省会长春,“21”代表投递地区。
因此,验证我国的邮政编码非常方便,如下图所示:
第五部分:两个IP地址的验证
可以简单准确地验证IP地址。
1.简单的IP地址验证
我首先ping一下42.121.252.58的IP地址。其实IP地址一般是1~3位整数,1~3位整数,1~3位整数,所以我们可以简单的用下面的正则表达式来验证:
([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之间。显然,我们应该在这里使用分区间方法。
0-99可以表示如下:([1-9]d?)|0(注意这里的表示,如果这个数字不是0,那么它前面不能有0)
100-199可以表示如下:1d{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 [
示范效果如下:
值得注意的是,分组非常重要,只有分组正确,才有可能没有问题。
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。