出生日期正则,比较详细的一次出生日期正则表达式解析
代码如下:
^((?: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