常规年份的月份

电脑杂谈  发布时间:2020-05-12 17:02:42  来源:网络整理

php日期正则表达式_出生日期正则表达式_日期时间正则表达式

PS: 学习了很长时间的正则表达式后,我没有做任何体面的模式. 当我早上醒来时,我一时兴起. 我决心证明我们的规律并非白人. 所以我选择了最普通的. 'S日期匹配...

日期格式: 年月日,即yyyy-mm-dd出生日期正则表达式,例如今天的日期是2008-11-1,当然根据yyyy-mm-dd模式是2008-11- 01. 我们的表达式应该同时匹配这两个日期-当月和日是个位数时,前导'0'是可选的.

另外一点,据估计,我们匹配万年历的机会并不多. 通常情况下,匹配生日就足够了,开始日期和结束日期就足够了,所以我的表达式只匹配1900-2099年. 据估计,我的平均年龄的人很难超过这两年...

废话少说,开始写表达式.

首先当然是年份-/(((19 | 20)\ d {2})/. (这里使用Perl,因为Javascript使用了这种方法,而且这种方法非常简洁,所以我个人非常喜欢它. )

匹配年份是整个表达式中最简单的部分. 创建月和日的以​​下表达式可能有多种情况. 我只能在整个表达式中创建多个模式以进行匹配. 在这些In模型中,年份部分基本相同(leap年除外).

小学生要知道的一件事: 在一年的12个月中,1月,3月,5月,7月,8月,10月和12月每个月都有31天,4月,6月,9月每个月都有31天,和11月每个月有30天,而2月是最特殊的日子. 2月只有28天出生日期正则表达式,the年只有29天-for年,我们将等待整体情况,然后再考虑特殊待遇.

31天的月份-/(0?[13578] | 1 [02])/.

php日期正则表达式_出生日期正则表达式_日期时间正则表达式

日期-/(0?[1-9] | [12] \ d | 3 [01])/.

1. 总之,匹配31天的月份模式为: /(年)-(月)-(天)/,即/(((19 | 20)\ d {2})-(0?[13578] | 1 [ 02])-(0?[1-9] | [12] \ d | 3 [01])/

30天的月份-/(0?[469] | 11)/.

日期-/(0?[1-9] | [12] \ d | 30)/.

2. 总之,匹配30天的月份模式是: /(年)-(月)-(天)/,即/(((19 | 20)\ d {2})-(0?[469] | 11)- (0?[1-9] | [12] \ d | 30)/

以下与一般年份的2月匹配,即2月的28天.

月-/ 0? 2 /

日期-/(0?[1-9] | 1 \ d | 2 [0-8])/

出生日期正则表达式_日期时间正则表达式_php日期正则表达式

3. 总之,匹配28天的二月模式为: /(年)-(月)-(天)/,即/(((19 | 20)\ d {2})-0? 2-(0?[1-9] | 1 \ d | 2 [0-8])/

可以设置集成的1、2、3以匹配leap年以外的日期-

/((每月31天)|(每月30天)|(2月28日))/,即—

/((((((19 | 20)\ d {2})-(0?[13578] | 1 [02])-(0?[1-9] | [12] \ d | 3 [01 ]))|((((19 | 20)\ d {2})-(0?[469] | 11)-(0?[1-9] | [12] \ d | 30))|((( 19 | 20)\ d {2})-0?2-(0?[1-9] | 1 \ d | 2 [0-8]))))

在这一点上,我们必须开始考虑leap年的2月. 我们都知道leap年的2月有29天,但是but年到底是什么? ?

让我们花点时间列举一下1900-2099年,那几年是those年.

1904,1908,1912,1916,1920,1924,1928,1932,1936,1940,1944,1948,1952,1956,1960,1964,1968,1972,1976,1980,1984,1988,1992,1996 ,2000,2004,2008,2012,2016,2020,2024,2028,2032,2036,2040,2044,2048,2052,2056,2060,2064,2068,2072,2076,2080,2084,2088,2092,2096

Le年: 可以被4整除,如果是一百年,则必须被400整除,例如1900是一百年,但不能被400整除,因此它不是a年,而2000是年.

php日期正则表达式_日期时间正则表达式_出生日期正则表达式

也许我们都知道如何计算leap年,但是正则表达式却不知道. 正则表达式没有计算能力. 我们所能做的就是找到一个列表,该列表可以在有限的时间内列出所有可能的可能性. 解决方案-因此,我在上面列出的所有the年不是完整的,而是找出表达式的规则...

仔细分析以上leap年后,很容易找到:

1. 一位必须是偶数

2. 当十位数字为奇数时,一位数字只有两种可能性: 2和6

3. 当十位数是偶数(0除外)时,单个数字有三种可能性: 0、4、8

4. 当十位数为0时,个位数为4和8,2000年的特殊处理

因此,匹配match年如下: /((((19 | 20)([13579] [26] | [2468] [048] | 0 [48]))|(2000))/

因此,二月leap年的匹配模式为/((((19 | 20)([13579] [26] | [2468] [048] | 0 [48]))|(2000))-0 ? 2-(0?[1-9] | [12] \ d)/

日期时间正则表达式_出生日期正则表达式_php日期正则表达式

结合所有先前的模式,您可以获得与日期匹配的正则表达式

/ ^(((((19 | 20)\ d {2})-(0?[13578] | 1 [02])-(0?[1-9] | [12] \ d | 3 [ 01])))|((((19 | 20)\ d {2})-(0?[469] | 11)-(0?[1-9] | [12] \ d | 30))|(( (19 | 20)\ d {2})-0?2-(0?[1-9] | 1 \ d | 2 [0-8]))|(((((((19 | 20)([13579 ] [26] | [2468] [048] | 0 [48]))|(2000))-0?2-(0?[1-9] | [12] \ d)))$ /

上面的表达式不是最佳的,至少以下方法会更好:

/ ^(((((19 | 20)\ d {2})-(0?[13-9] | 1 [012])-(0?[1-9] | [12] \ d | 30))|((((19 | 20)\ d {2})-(0?[13578] | 1 [02])-31)|((((19 | 20)\ d {2})-0? 2-(0?[1-9] | 1 \ d | 2 [0-8]))|(((((19 | 20)([13579] [26] | [2468] [048] | 0 [48 ]))|(2000))-0?2-29))$ /

表达式的匹配规则(按以下序列号的顺序):

1. 比赛1月至30天(2月除外)

2. 如果1不匹配,则匹配12月31日的1、3、5、7、8、10

3. 如果无法匹配2,则匹配2月1日至28日


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-207642-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...