博客地址:http://www.cnblogs.com/zhuzhenwei918/p/6202932.html

正则表达式之数字验证

第一部分:数值验证

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等都属于这个范围,这该怎么验证呢?别着急,我们可以分区间验证:

  • 使用\b[1-9]\d{0-2}\b来验证1-999之间的所有正整数
  • 使用\b[1-4]\d{3}\b来验证1000-4999之间的所有正整数
  • 使用\b5[0-5]\d{2}\b来验证5000-5599之间的所有正整数
  • 使用\b56[0-6]\d\b来验证5600-5669之间的所有正整数
  • 使用\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)|(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.实数的验证

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

     验证方法如下:

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

   其中-?表示可以有负号也可以没有负号,(0|[1-9]\d*)表示整数部分可以是0也可以是不以0开头的其他整数,\.是为了对元字符.进行转义,\d+表示在小数点后面可以有1个或多个数字重复。所以它可以用来验证一般形式的实数(如0.0、1.2、-1.20等),还可以用来验证负0,如-0.0、-0.00等。

    

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

-?(0|([1-9]\d*))\.\d{3}$

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

  7.科学计数法的验证

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

  

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

第二部分:4种国内电话号码的验证

  我们知道中国的电话号码的形式不外乎有下面四种:

  1. 手机号码
  2. 固定电话号码(不包括区号)
  3. 区号+固定电话号码
  4. 区号+固定电话号码+分机号

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

1.手机号码

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

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

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位固定号码的组合。且在区号和固定号码之间一般都是由-(连字符)链接的。可知,我们只需要对区号和固定电话分别验证即可。  

\b0\d{2,3}[- ]?\d{7,8}\b

  演示效果如下:

4.区号+固定电话号码验证+分机号码验证

  一些比较大的公司、企业或者政府部门在向外部提供固定的电话号码是,除了区号、固定电话号码之外,还可能包括分机号码。

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

\b0\d{2,3}[- ]?\d{7,8}[- ]?\d{4}\b

  演示效果如下:

第三部分: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地址验证

  我首先ping到了www.cnblogs.com的IP地址:42.121.252.58。 实际上IP地址一般是1~3位整数.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之间可以这样表示: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)

  演示效果如下:

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

转载地址:http://www.cnblogs.com/zhuzhenwei918/p/6202932.html

正则表达式之数字验证相关推荐

  1. 微信小程序中,使用正则表达式,快速验证是否是数字(附正则表)

    微信小程序中,使用正则表达式,快速验证是否是数字(附正则表) 1.示例 if (this.data.goodsNum == '' || this.data.goodsNum == undefined) ...

  2. 微信小程序,使用正则表达式,快速验证是否是数字

    微信小程序,使用正则表达式,快速验证是否是数字 if (this.data.goodsNum == '' || this.data.goodsNum == undefined) {console.lo ...

  3. 【转】ASP.NET验证控件详解(非空验证,比较验证,范围验证,正则表达式,自定义验证)...

    [转]ASP.NET验证控件详解(非空验证,比较验证,范围验证,正则表达式,自定义验证) ASP.NET验证控件详解 现在ASP.NET,你不但可以轻松的实现对用户输入的验证,而且,还可以选择验证在服 ...

  4. java正则表达式匹配数字范围_在java中怎么利用正则表达式匹配数字

    在java中怎么利用正则表达式匹配数字 发布时间:2020-12-03 17:47:12 来源:亿速云 阅读:58 作者:Leah 在java中怎么利用正则表达式匹配数字?针对这个问题,这篇文章详细介 ...

  5. JS 正则表达式(数字、正则)

    验证数字的正则表达式集 验证数字:^[0-9]*$ 验证n位的数字:^\d{n}$ 验证至少n位数字:^\d{n,}$ 验证m-n位的数字:^\d{m,n}$ 验证零和非零开头的数字:^(0|[1-9 ...

  6. 【python】数字验证常用操作

    数字验证常用操作 运行参数获取 OptionParser ArgumentParser sys.argv 字典操作 update 遍历 json dump load 切片 os system path ...

  7. 正则表达式-注册表验证

    正则表达式-注册表验证 正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串& ...

  8. JS常用正则表达式表单验证代码大汇总

    正则表达式使用详解 简介 简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具.其作用如下: 测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或 ...

  9. qq号的正则表达式html,JavaScript中的正则表达式使用及验证qq号码的正则

    废话不多说了,直接给大家贴正则表达式代码了. function myValid() { var errorMsg = ""; var res = true; //拿到要验证的值. ...

最新文章

  1. Node版本管理nvm, npm
  2. Ubuntu和Windows默认系统启动顺序修改
  3. 免费的HTML5连载来了《HTML5网页开发实例具体解释》连载(四)HTML5中的FileSystem接口...
  4. 一文详解DeepMind最新模型SUNDAE,了解迭代去噪模型的前世今生
  5. P3235-[HNOI2014]江南乐【整除分块,SG函数】
  6. 素描java字母_进行Java基本GUI设计需要用到的包是
  7. html 循环_一个不被程序员认为是编程语言的语言——HTML,你怎么看?
  8. Linux系统升级维护费,Antergos Linux 宣布停止维护
  9. linux 下 多进程与多线程
  10. jQuery:自学笔记(3)——操作DOM
  11. Centos下安装Scrapy
  12. Go 语言高性能编程
  13. 静态HTML+CSS 中国高等教育学生信息网(学信网)网站
  14. Python瞎搞自学笔记
  15. Apache druid的ingestion spec数据插入规范
  16. 第5章-构建Spring Web应用程序
  17. 产品经理:一个商业 AIoT 智能硬件产品的完整拆解
  18. phpstorm连接mysql
  19. 柬埔寨招聘中文计算机,柬埔寨ll中文老师1000美金+招聘机会来啦,快来围观!!!...
  20. Failed to load JVM DLL

热门文章

  1. python安装gensim_python gensim
  2. bug bounty - 绕过限制劫持Skype账号
  3. Vue2竖向文字滚动
  4. 万向区块链“汽车供应链物流服务平台”获评“2018金融区块链创新应用优秀案例”...
  5. WPF学习笔记16 BookDemo 2
  6. 强训之【走方格的方案数和另类加法】
  7. 【wpf】如果让Bingding 如何让后台数据强制更新界面
  8. kali启动时出现resuming from hibernation错误
  9. 在WordPress评论里添加电话、手机号、微信号的表单功能教程
  10. 论文复现-1:Perturbation CheckLists for Evaluating NLG Evaluation Metrics