出生日期正则,比较详细的一次出生日期正则表达式解析

代码如下:

^((?:19[2-9]\d{1})|(?:20(?:(?:0[0-9])|(?:1[0-8]))))((?:0?[1-9])|(?:1[0-2]))((?:0?[1-9])|(?:[1-2][0-9])|30|31)$

这次给大家带来用正则判断出生日期,用正则判断出生日期的注意事项有哪些,下面就是实战案例,一起来看一下。

简言

在表单验证中,经常会用正则表达式做出生日期校验。本文把出生日期分割成几个部分,分步地介绍了实现一个出生日期校验的完整过程。相信您在理解了本篇的内容后,对编写正则表达式会有更深入的理解和更强的信心。

我们将一个形式如 2018-06-15 的出生日期分割个年份,月份和日期三个组成部分,分别来编写相应的正则。

1 年份正则

首先给出年份正则表达式的规则定义:

  • 年份由4位数字组成

  • 只接受19,20开头的年份

根据以上规则,很容易写出年份的正则表达式:

/^(19|20)\d{2}$/

其中/ /两个斜杠及其中间的字符是正则表达式直接量的定义;^表示匹配字符串的开头,$表示匹配字符串的结尾;^(19|20)表示匹配以19或20开头的字符串,一对小括号作用是将几项组合为一个单元;而\d{2}表示匹配任意ASCII数字2次,\d等价于[0-9],而{2}则表示匹配前一项2次。

上述正则表达式可以匹配1900至2099这些年份,如果想限制年份的范围,增加规则如下:

  • 年份起始于1920年

  • 年份终止于2018年

根据以上规则,变更正则表达式如下:

/^(19[2-9]\d{1})|(20((0[0-9])|(1[0-8])))$/;

2 月份正则

首先给出月份正则表达式的规则定义:

  • 月份可以是1-12

  • 月份如果是1-9,则前面可加0

根据以上规则,给出如下正则及简单测试:

/^((0?[1-9])|(1[0-2]))$/

3 日期正则

首先给出日期正则表达式的规则定义:

  • 日期可以是1-31

  • 如果日期是1-9,则前面可加0

根据以上规则,给出如下正则及简单测试:

^((0?[1-9])|([1-2][0-9])|30|31)$/

4 组合校验

根据上述的年份正则,月份正则,日期正则组合形成出生日期的正则表达式:

^((19[2-9]\d{1})|(20((0[0-9])|(1[0-8]))))\-((0?[1-9])|(1[0-2]))\-((0?[1-9])|([1-2][0-9])|30|31)$

从以上测试结果可以看出,上述正则验证还不完善,主要是2,4,6,9,11月份的天数问题。

自行完善

5 完善

根据第4步的问题,增加限定规则如下:

  • 4,6,9,11月没有31日

  • 2月平年是28天

  • 2月闰年是29天

平年闰年判定:

能被4整除的年份是闰年,不能被4整除的年份是平年。但是如果是整百年,就只有能被400整除才是闰年,否则就是平年。

正则函数-29天判断闰月

(iYear % 4 ==0 && iYear % 100 != 0) || (iYear % 400 == 0))

如果不是就28天

^((?:19[2-9]\d{1})|(?:20(?:(?:0[0-9])|(?:1[0-8]))))\-((?:0?[1-9])|(?:1[0-2]))\-((?:0?[1-9])|(?:[1-2][0-9])|30|31)$

上述正则表达式利用该种方法按照正则匹配的顺序分别取出了年月日项,以便后序比较。

根据上述分析与测试,我们不但实现了年月日的正则的一般判定,还实现了日期范围及2,4,6,9,11月等特殊月份天数的处理,测验结果达到了我们设定的目标。

根据上述讲解和分析,我们可以调整相应的限定规则,使其满足于特定场景下的项目需要。

相信看了本文案例你已经掌握了方法,更多精彩请关注CSDN网其它相关文章!

微博@4GIFS

出生日期正则表达式丨出生日期年月日正则如何表达?相关推荐

  1. 一篇认真的正则入门文章:正则表达式数字和数字范围匹配表达

    文章目录 正则表达式中的数字 \ d用于单个或多个数字 两位数或三位数匹配 正则表达式0-9 正则表达式1到9 正则表达式0到10 正则表达式1到10 正则表达式1到12 正则表达式1到16 正则表达 ...

  2. 正则表达式口诀及常用正则 。正则贪婪与非贪婪模式

    正则表达式口诀及常用正则 签于网上太多的介绍都是一篇凶悍的短文,边看边理解可以,帮助记忆不行.又受五笔字型字根表口诀"白手看头三二斤..."的启发,  试作"正则表达式助 ...

  3. JS正则表达式之邮箱的正则

    使用正则表达式编写邮箱的正则 /*电子邮箱的基本格式:hello@abc.com.cnhello部分:表示任意的字母数字以及小圆点(.),如abc.abc@qq.com,不过小圆点的部分是可有可无的, ...

  4. python 正则表达式取反,python正则取反_Python正则表达式-基础

    Python正则表达式-基础 python使用正则,需要先引入re模块 import re 匹配符 单个字符表达式 含义 [0-9] 0123456789任意之一 [a-z] 小写字母任意之一 [A- ...

  5. python_正则表达式、正则函数、正则计算器

    # ### 正则表达式 匹配单个字符 import re """ lst = re.findall(正则表达式,要匹配的字符串) 返回列表,按照正则表达式匹配到的内容都扔 ...

  6. 正则表达式教程手册、正则一点通(Chinar出品)

    C#语法之正则 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心创新! ...

  7. html正则表达式识别网址,JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)...

    本文实例讲述了JS正则匹配URL网址的方法.分享给大家供大家参考,具体如下: 最强的匹配网址-url的正则表达式:匹配www,http开头的一切网址 直接插入正则表达式: [a-zA-Z0-9][-a ...

  8. 怎么用计算机算出出生日期,算农历出生日期计算器,根据出生日期怎么算年龄?...

    提起算农历出生日期计算器,大家都知道,有人问根据阴历日期和出生时间算阳历,另外,还有人想问农历虚岁计算器 农历虚岁怎么算,你知道这是怎么回事?其实农历生日如何算,下面就一起来看看根据出生日期怎么算年龄 ...

  9. 正则表达式(三)正则的捕获

    1. 实现正则捕获的办法 1. 正则RegExp.prototype上的方法 exec test 2. 字符串String.prototype上支持正则表达式处理的方法 replace match s ...

最新文章

  1. Himmelblau函数优化实战
  2. c 指定端口连接mysql_c++连接mysql(MYSQL C api使用)
  3. 基于MaxCompute+PAI的用户增长方案实践
  4. 全志t3linux驱动_全志A20GPIO驱动分析|Android驱动及系统开发交流区|研发交流|雨滴科技技术论坛 - Powered by Discuz!...
  5. exit()和_exit()的区别
  6. Miller_Rabin测试法
  7. python怎样安装wordcloud(词云)文件
  8. pb中的tounicode 函数_历年高考数学的必考热点三角函数,2020高考生,你会了吗?...
  9. 使用Rust库bindgen之Hello World(附代码)
  10. Photoshop CS6 破解安装
  11. 论文翻译:Dual-path RNN: efficient long sequence modeling for time-domain single-channel speech separatio
  12. 如何防止U盘病毒入侵方法
  13. D-Link DP-LINK302打印服务器WIN7版软件
  14. tan-python-day02
  15. 如何更电计算机共享名称,手机电脑电视之间如何共享、投屏?
  16. 【网络爬虫项目】实战知识点 - webcrawler
  17. 【职场必备知识】毕业留蓉政策与发展前景分析
  18. 达芬奇密码 第七十一章
  19. 开源棒棒糖学习Android-26之Button、EditText等等的老子TextView一万多行的类源码赏析
  20. 立秋后6大脏器排毒法 干净才是真正文艺范儿(转)

热门文章

  1. C语言教程(五):选择结构
  2. 视频监控系统上云解决方案EasyCVR集成海康EHome私有协议系列——文件查找操作流程
  3. Stata学习手册——第一讲
  4. outlook2010 html签名,Outlook2010如何设置签名
  5. 【复变函数】常用公式大全
  6. 为什么同门硕士进了BAT拿高工资,而博士却要挤破头进985高校?
  7. dismiss ios pop效果_iOS ~ ViewController的Push,Pop和Present,Dismiss转场动画
  8. 荷包app软件测试,智能分贝测试仪app
  9. can not be represented as java.sql.Timestamp
  10. 【学习笔记】树莓派(3B+)及VMware对于代理Proxy的使用