Turn: the regular expression of the verification date is fully verified

Source: Internet
Author: User

Before entering the subject, we need to clarify two concepts:

1. What is a valid date range? This issue varies with different application scenarios. Here we adopt the conventions in MSDN:

DateTimeValue Type indicates the date and time between midnight 12:00:00 on January 1, January 1, 0001 and 11:59:59 on January 1, December 31, 9999.
Ii. Explanation of the leap year. The interpretation of the Primary School Mathematics Office of the People's Education Press is simple and easy to understand (mediawiki and so on do not explain why the whole century must be a multiple of 400 is a leap year ):
First, verify the year. Obviously, the year range is 0001-9999, and the regular expression matching YYYY is:
[0-9] {3} [1-9] | [0-9] {2} [1-9] [0-9] {1} | [0-9] {1} [1-9] [0-9] {2} | [1-9] [0-9] {3}
[0-9] can also be expressed as/d, but/d is not as intuitive as [0-9], so I will always use [0-9]

There are two difficulties in verifying a date using regular expressions: one is that the number of days in a month is different, and the other is the consideration of a leap year.
For the first difficulty, we do not consider the leap year first. Assume that the year of February is 28 days. In this way, the month and date can be divided into three situations:

1. the month is 1, 3, 5, 7, 8, 10, 12, the number of days is 01-31, the regular expression that matches the MM-DD is:
2, the month is 4, 6, 9, 11, the number of days is 01-30, the regular expression that matches the MM-DD is:
3, the month is 2, consider the year, match the regular expression of the MM-DD is:
Based on the above results, we can obtain the regular expression matching the year date format as YYYY-MM-DD:



Next we will solve the second difficulty: The consideration of the leap year. Based on the definition of a leap year, we can divide a leap year into two categories:

1. The year in which the product can be divisible by 4 but cannot be divisible by 100. Find the variation rules of the last two digits and quickly obtain the following regular match:
2. The year to be divisible by 400. The number that can be divisible by 400 is certainly 100, so the last two must be 00. We only need to ensure that the first two can be divisible by 4. The corresponding regular expression is:
2. The regular expression of the strongest verification date, with the verification of the leap year added

This date Regular Expression supports
YYYY-MM-DDYYYY/MM/DDYYYY_MM_DDYYYY.MM.DD
Match: 2008-2-29 2008/02/29

2008-2-30 2007-2-29

The complete regular expression is as follows: (^ (1 [8-9]/d {2}) | ([2-9]/d {3 }))([-///. _]) (10 | 12 | 0? [13578]) ([-//. _]) (3 [01] | [12] [0-9] | 0? [1-9]) $) | (^ (1 [8-9]/d {2}) | ([2-9]/d {3 })) ([-///. _]) (11 | 0? [469]) ([-//. _]) (30 | [12] [0-9] | 0? [1-9]) $) | (^ (1 [8-9]/d {2}) | ([2-9]/d {3 })) ([-///. _]) (0? 2) ([-///. _]) (2 [0-8] | 1 [0-9] | 0? [1-9]) $) | (^ ([2468] [048] 00) ([-//. _]) (0? 2 )([-///. _]) (29) $) | (^ ([3579] [26] 00 )([-///. _]) (0? 2 )([-///. _]) (29) $) | (^ ([1] [89] [0] [48]) ([-//. _]) (0? 2 )([-///. _]) (29) $) | (^ ([2-9] [0-9] [0] [48]) ([-//. _]) (0? 2 )([-///. _]) (29) $) | (^ ([1] [89] [2468] [048]) ([-//. _]) (0? 2 )([-///. _]) (29) $) | (^ ([2-9] [0-9] [2468] [048]) ([-//. _]) (0? 2 )([-///. _]) (29) $) | (^ ([1] [89] [13579] [26]) ([-//. _]) (0? 2 )([-///. _]) (29) $) | (^ ([2-9] [0-9] [13579] [26]) ([-//. _]) (0? 2) ([-//. _]) (29) $ ))


Finally, combine the expression of date verification for the Year of the year, we get the final validation date format for the YYYY-MM-DD of the regular expression is:

([0-9] {3} [1-9] | [0-9] {2} [1-9] [0-9] {1} | [0 -9] {1} [1-9] [0-9] {2} | [1-9] [0-9] {3 }) -(0 [13578] | 1 [02])-(0 [1-9] | [12] [0-9] | 3 [01]) | (0 [469] | 11)-(0 [1-9] | [12] [0-9] | 30 )) | (02-(0 [1-9] | [1] [0-9] | 2 [0-8]) | ([0-9] {2}) (0 [48] | [2468] [048] | [13579] [26]) | (0 [48] | [2468] [048] | [3579] [26]) 00)-02-29)

Regular Expression in DD/MM/YYYY format:

(0 [1-9] | [12] [0-9] | 3 [01])/(0 [13578] | 1 [02]) | (0 [1-9] | [12] [0-9] | 30)/(0 [469] | 11 )) | (0 [1-9] | [1] [0-9] | 2 [0-8])/(02 )) /([0-9] {3} [1-9] | [0-9] {2} [1-9] [0-9] {1} | [0 -9] {1} [1-9] [0-9] {2} | [1-9] [0-9] {3 })) | (29/02/([0-9] {2}) (0 [48] | [2468] [048] | [13579] [26]) | (0 [48] | [2468] [048] | [3579] [26 )))
  Original address http://blog.csdn.net/aking8736/article/details/2750066

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.