Regex để xác thực định dạng ngày dd / mm / yyyy


171

Tôi cần xác thực chuỗi ngày cho định dạng dd/mm/yyyybằng biểu thức chính quy.

Regex này xác nhận dd/mm/yyyy, nhưng không phải là ngày không hợp lệ như 31/02/4500:

^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$

Một regex hợp lệ để xác nhận dd/mm/yyyyđịnh dạng với hỗ trợ năm nhuận là gì?


3
Tôi nghĩ rằng nó có thể hữu ích nếu bạn đặt kỳ vọng chính xác, vì trên thực tế, biểu thức chính thức này KHÔNG xác thực chính xác các năm nhuận; ví dụ: không có ngày 29 tháng 2 năm 2013, nhưng regex này khẳng định rằng điều đó là hợp lệ: regexr.com?346fp
TML

7
Tại sao với Regex? Có nhiều cách dễ dàng hơn (và chính xác hơn) ...
Dan Puzey

2
Biểu thức thông thường là để khớp mẫu, không kiểm tra giá trị số. Tìm một chuỗi có khả năng với regex, sau đó kiểm tra giá trị số của nó trong bất kỳ ngôn ngữ máy chủ nào của bạn (PHP, bất cứ thứ gì).
Andy Lester

3
Câu trả lời này đã được thêm vào Câu hỏi thường gặp về Biểu thức thường xuyên chồng chéo , trong phần "Các tác vụ xác thực chung".
aliteralmind

4
@BurhanKhalid: Bạn sai rồi. Biểu thức chính quy là công cụ tốt nhất để xác thực, vì đầu vào HTML5 có một thuộc tính có tên patternlà biểu thức chính quy và các trình duyệt tự động xác thực theo regex mà không sử dụng bất kỳ javascript nào. Chỉ bằng cách giải quyết một regex trong thuộc tính mẫu!
kinh ngạc

Câu trả lời:


328

Regex bạn đã dán không xác thực năm nhuận một cách chính xác, nhưng có một cái mà trong cùng một bài . Tôi đã sửa đổi nó để lấy dd/mm/yyyy, dd-mm-yyyyhoặc dd.mm.yyyy.

^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[13-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$

Tôi đã thử nó một chút trong liên kết Arun cung cấp trong câu trả lời của anh ấy và cũng ở đây và nó dường như hoạt động.

Chỉnh sửa ngày 14 tháng 2 năm 2019: Tôi đã xóa một dấu phẩy trong regex cho phép ngày như 29-0,-11


9
Regex sử thi! Làm thế nào dễ dàng có thể được thay thế theo định dạng? Ví dụ: yyyy-mm-dd và mm-dd-yyyy. Tôi đã có ý định hiểu điều đó với ý nghĩ đó, nhưng nó vượt quá các kỹ năng regex của tôi.
mrswadge

7
Ngoài ra DD/MM/YYYY, regex này cũng chấp nhận DD/MM/YYmà tôi không chắc chắn rằng đó là trong ý định ban đầu của người đăng. Nếu bạn không muốn hỗ trợ 'YY', thì hãy xóa tất cả các bộ ?lượng hóa tùy chọn .
dùng1485864

2
@PurveshDesai thay thế từng 0?0, và cũng có thể loại bỏ sự xuất hiện cuối cùng của ?.
Ofir Luzon

4
@MaraisRossouw, Bạn đã đúng, trong 4 năm chữ số, thực sự có 3 ?cái cần được loại bỏ: thay thế tất cả (?:1[6-9]|[2-9]\d)?bằng (?:1[6-9]|[2-9]\d).
Ofir Luzon

2
Bỏ qua chỉ để nói điều này: WOW và tất nhiên cảm ơn bạn
Jero Dungog

266

Tôi đã mở rộng regex do @Ofir Luzon đưa ra cho các định dạng dd-mmm-YYYY, dd / mmm / YYYY, dd.mmm.YYYY theo yêu cầu của tôi. Bất cứ ai khác có cùng yêu cầu có thể tham khảo điều này

^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]|(?:Jan|Mar|May|Jul|Aug|Oct|Dec)))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2]|(?:Jan|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)(?:0?2|(?:Feb))\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9]|(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep))|(?:1[0-2]|(?:Oct|Nov|Dec)))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$

và đã thử nghiệm cho một số trường hợp thử nghiệm tại đây http://regexr.com/39tr1 .

Để hiểu rõ hơn cho biểu thức chính quy này hãy tham khảo hình ảnh này: nhập mô tả hình ảnh ở đây


1
Có, làm thế nào bạn tạo ra nó? :)
Dao cạo

Tôi đã tạo nó trực tuyến bằng cách sử dụng một số trang web và bây giờ tôi cũng không nhớ trang web mà tôi đã tạo hình ảnh này. Tôi sẽ thêm tài liệu tham khảo một khi tôi nhớ :)
Alok Chaudhary

4
@ user3733831 8888là một năm có thể. Tôi hy vọng sẽ sống đến khoảng tuổi đó.
Dan Nissenbaum

1
Hoạt động tuyệt vời ngay cả trong những năm nhuận. Tôi cũng đã thêm hỗ trợ cho các tên tháng ngắn của Tây Ban Nha.
Fer R

2
@AlokChaudhary, sơ đồ đã được tạo bằng debuggex.com
Taha BASRI 23/12/19

69

Để ý:

Regrec của bạn không hoạt động trong nhiều năm mà "là bội số của 4 và 100, nhưng không phải là 400". Năm vượt qua bài kiểm tra đó không phải là năm nhuận. Ví dụ: 1900, 2100, 2200, 2300, 2500, v.v. Nói cách khác, nó đặt tất cả các năm với định dạng \ d \ d00 trong cùng một năm của năm nhuận, không chính xác. - ManyToLearn

Vì vậy, nó hoạt động đúng chỉ trong [1901 - 2099] (Whew)

dd / MM / yyyy:

Kiểm tra nếu năm nhuận. Năm từ 1900 đến 9999 là hợp lệ. Chỉ dd / MM / yyyy

(^(((0[1-9]|1[0-9]|2[0-8])[\/](0[1-9]|1[012]))|((29|30|31)[\/](0[13578]|1[02]))|((29|30)[\/](0[4,6,9]|11)))[\/](19|[2-9][0-9])\d\d$)|(^29[\/]02[\/](19|[2-9][0-9])(00|04|08|12|16|20|24|28|32|36|40|44|48|52|56|60|64|68|72|76|80|84|88|92|96)$)

7
Câu trả lời này chỉ hoạt động với dd / MM / yyyy. Do đó, là câu trả lời đúng.
Rodrigo

2
@SylvainB Tôi đã sửa nó
gdZeus

2
@gdZeus Cảm ơn bạn đã giao hàng, thậm chí hai năm sau! Đáng sợ khi nghĩ rằng một giải pháp không đầy đủ đã được xác nhận ở đây rất lâu.
SylvainB

Để làm cho nó nhanh hơn, bạn có thể làm cho các nhóm không nhóm. regexr.com/3esom ^ (? :(? :(? :(?: 0 [1-9] | 1 [0-9] | 2 [0-8]) [\ /] (?: 0 [1- 9] | 1 [012])) | (? :(?: 29 | 30 | 31) [\ /] (?: 0 [13578] | 1 [02])) | (? :(?: 29 | 30 ) [\ /] (?: 0 [4,6,9] | 11))) [\ /] (?: 19 | [2-9] [0-9]) \ d \ d) | (?: 29 [\ /] 02 [\ /] (?: 19 | [2-9] [0-9]) (?: 00 | 04 | 08 | 12 | 16 | 20 | 24 | 28 | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | 96)) $
Matt Vukomanovic

Tôi cho rằng tôi đã tìm thấy một lỗi: 29/02/2100không tồn tại (2100 KHÔNG phải là năm nhuận), nhưng vẫn được chấp nhận bởi mẫu đã cho.
KnorxThieus 17/07/17


12

Tôi nghi ngờ rằng những điều sau đây là chính xác như có thể dự kiến ​​mà không biết khi nào địa phương của người dùng chuyển từ lịch Julian sang lịch Gregorian.

Nó chấp nhận '-', '/' hoặc không có gì là dấu phân cách giữa năm, tháng và ngày, bất kể thứ tự.

MMddyyyy:

^(((0[13-9]|1[012])[-/]?(0[1-9]|[12][0-9]|30)|(0[13578]|1[02])[-/]?31|02[-/]?(0[1-9]|1[0-9]|2[0-8]))[-/]?[0-9]{4}|02[-/]?29[-/]?([0-9]{2}(([2468][048]|[02468][48])|[13579][26])|([13579][26]|[02468][048]|0[0-9]|1[0-6])00))$

ddMMyyyy:

^(((0[1-9]|[12][0-9]|30)[-/]?(0[13-9]|1[012])|31[-/]?(0[13578]|1[02])|(0[1-9]|1[0-9]|2[0-8])[-/]?02)[-/]?[0-9]{4}|29[-/]?02[-/]?([0-9]{2}(([2468][048]|[02468][48])|[13579][26])|([13579][26]|[02468][048]|0[0-9]|1[0-6])00))$

yyyyMMdd:

^([0-9]{4}[-/]?((0[13-9]|1[012])[-/]?(0[1-9]|[12][0-9]|30)|(0[13578]|1[02])[-/]?31|02[-/]?(0[1-9]|1[0-9]|2[0-8]))|([0-9]{2}(([2468][048]|[02468][48])|[13579][26])|([13579][26]|[02468][048]|0[0-9]|1[0-6])00)[-/]?02[-/]?29)$

Khác với thứ tự, tất cả đều chính xác với Lịch Julian (năm nhuận bốn năm một lần) cho đến năm 1700, khi Lịch Gregorian chuyển hướng từ Julian. Nó có hai vấn đề:

  1. Nó chấp nhận năm 0000, không tồn tại trong nhiều tiêu chuẩn, nhưng không phải tất cả, tiêu chuẩn. Lưu ý rằng ISO 8601 không chấp nhận năm 0000 (tương đương 1 BCE).
  2. Nó không bỏ qua 10-13 ngày đã bị mất khi Lịch Gregorian được sử dụng. Điều này thay đổi theo địa phương mặc dù. Chẳng hạn, Giáo hội Công giáo La Mã đã bỏ qua 10 ngày, từ ngày 5 tháng 10 đến ngày 14 tháng 10 năm 1582, nhưng Hy Lạp (lần chuyển đổi cuối cùng) đã bỏ qua ngày 16 tháng 2 đến ngày 28 năm 1923, 13 ngày, phải tính đến những năm nhuận của năm 1700, 1800, và 1900.

Điều này đã được thử nghiệm đối với việc triển khai lịch của Java từ năm 0001 cho đến năm 9999 với sự khác biệt duy nhất là 10 ngày kể trên vào năm 1582.


Regex YYYYMMDD khớp không chính xác [01 | 02 | 03 | 05 | 06 | 07 | 09 | 10 | 11 | 13 | 14 | 15] 00-02-29. Regex sửa chữa : ^([0-9]{4}[-/]?((0[13-9]|1[012])[-/]?(0[1-9]|[12][0-9]|30)|(0[13578]|1[02])[-/]?31|02[-/]?(0[1-9]|1[0-9]|2[0-8]))|([0-9]{2}(([2468][048]|[02468][48])|[13579][26])|([13579][26]|[02468][048])00)[-/]?02[-/]?29)$. Đã thử nghiệm với python: repl.it/repls/DepereeBestCh chương
kpr

10

Đối với những người nhìn vào những điều này và hoàn toàn bối rối, đây là một đoạn trích từ kịch bản của tôi. Thật không may, tất cả những gì nó khớp với các số hợp lệ trong đầu vào thời gian và ngày 31 tháng 2 sẽ được đánh dấu là hợp lệ, nhưng như nhiều người đã nói, regex thực sự không phải là công cụ tốt nhất để thực hiện bài kiểm tra này.

Để khớp một ngày theo định dạng 'yyyy-MM-dd hh: mm' (Hoặc thực sự theo bất kỳ thứ tự nào bạn muốn)

var dateerrors = false;
var yearReg = '(201[4-9]|202[0-9])';            ///< Allows a number between 2014 and 2029
var monthReg = '(0[1-9]|1[0-2])';               ///< Allows a number between 00 and 12
var dayReg = '(0[1-9]|1[0-9]|2[0-9]|3[0-1])';   ///< Allows a number between 00 and 31
var hourReg = '([0-1][0-9]|2[0-3])';            ///< Allows a number between 00 and 24
var minReg = '([0-5][0-9])';                    ///< Allows a number between 00 and 59
var reg = new RegExp('^' + yearReg + '-' + monthReg + '-' + dayReg + ' ' + hourReg + ':' + minReg + '$', 'g');
$('input').filter(function () {return this.id.match(/myhtml_element_with_id_\d+_datetime/);}).each(function (e) {
    if (e > 0) {
        // Don't test the first input. This will use the default
        var val = $(this).val();
        if (val && !val.trim().match(reg)) {
            dateerrors = true;
            return false;
        }
    }
});
if (dateerrors) {
    alert('You must enter a validate date in the format "yyyy-mm-dd HH:MM", e.g. 2019-12-31 19:30');
    return false;
}

Kịch bản trên bắt đầu bằng cách xây dựng một đối tượng regex. Sau đó, nó tìm thấy tất cả các đầu vào có id khớp với một mẫu nhất định và sau đó lặp qua các đầu vào này. Tôi không kiểm tra đầu vào đầu tiên tôi tìm thấy ( if (e > 0)).

Một chút giải thích:

var reg = new RegExp('^' + yearReg + '-' + monthReg + '-' + dayReg + ' ' + hourReg + ':' + minReg + '$', 'g');

^có nghĩa là bắt đầu trận đấu, trong khi đó $có nghĩa là kết thúc trận đấu.

return this.id.match(/myhtml_element_with_id_\d+_datetime/);

\d+có nghĩa là khớp một chuỗi số nguyên hoặc liền kề, do đó myhtml_element_with_id_56_datetimemyhtml_element_with_id_2_datetimesẽ khớp, nhưng myhtml_element_with_id_5a_datetimesẽ không khớp


8

Đây là một phiên bản khác của regex để khớp với bất kỳ định dạng ngày nào sau đây và cho phép các số 0 đứng đầu bị bỏ qua:

Chế độ: ^[0-3]?[0-9].[0-3]?[0-9].(?:[0-9]{2})?[0-9]{2}$

Diêm:

1/1/11 or 1.1.11 or 1-1-11 : true 01/01/11 or 01.01.11 or 01-01-11 : true 01/01/2011 or 01.01.2011 or 01-01-2011 : true 01/1/2011 or 01.1.2011 or 01-1-2011 : true 1/11/2011 or 1.11.2011 or 1-11-2011 : true 1/11/11 or 1.11.11 or 1-11-11 : true 11/1/11 or 11.1.11 or 11-1-11 : true

Hình dung biểu thức thường xuyên

Trình diễn gỡ lỗi


4
không hoạt động nếu bạn có 13/13/2000= Các trận đấuđúng
Andrei Krasnutski

3
39/39/39 không phải là một ngày. Hãy ngừng bỏ phiếu cho câu trả lời này.
Warren Sergent

6

Ở đây tôi đã viết một trong dd/mm/yyyyđó phân cách có thể là một trong -.,/phạm vi năm 0000-9999.

Nó liên quan đến những năm nhuận và được thiết kế cho các hương vị regex, hỗ trợ các giao diện , bắt các nhóm và phản hồi. KHÔNG hợp lệ như d/m/yyyy. Nếu cần thêm dải phân cách để[-.,/]

^(?=\d{2}([-.,\/])\d{2}\1\d{4}$)(?:0[1-9]|1\d|[2][0-8]|29(?!.02.(?!(?!(?:[02468][1-35-79]|[13579][0-13-57-9])00)\d{2}(?:[02468][048]|[13579][26])))|30(?!.02)|31(?=.(?:0[13578]|10|12))).(?:0[1-9]|1[012]).\d{4}$

Kiểm tra tại regex101 ; dưới dạng chuỗi Java:

"^(?=\\d{2}([-.,\\/])\\d{2}\\1\\d{4}$)(?:0[1-9]|1\\d|[2][0-8]|29(?!.02.(?!(?!(?:[02468][1-35-79]|[13579][0-13-57-9])00)\\d{2}(?:[02468][048]|[13579][26])))|30(?!.02)|31(?=.(?:0[13578]|10|12))).(?:0[1-9]|1[012]).\\d{4}$"

giải thích:

(?x) # modifier x: free spacing mode (for comments)
     # verify date dd/mm/yyyy; possible separators: -.,/
     # valid year range: 0000-9999

^    # start anchor

# precheck xx-xx-xxxx,... add new separators here
(?=\d{2}([-.,\/])\d{2}\1\d{4}$)

(?:  # day-check: non caturing group

  # days 01-28
  0[1-9]|1\d|[2][0-8]| 

  # february 29d check for leap year: all 4y / 00 years: only each 400
  # 0400,0800,1200,1600,2000,...
  29
  (?!.02. # not if feb: if not ...
    (?!
      # 00 years: exclude !0 %400 years
      (?!(?:[02468][1-35-79]|[13579][0-13-57-9])00)

      # 00,04,08,12,... 
      \d{2}(?:[02468][048]|[13579][26])
    )
  )|

  # d30 negative lookahead: february cannot have 30 days
  30(?!.02)|

  # d31 positive lookahead: month up to 31 days
  31(?=.(?:0[13578]|10|12))

) # eof day-check

# month 01-12
.(?:0[1-9]|1[012])

# year 0000-9999
.\d{4}

$ # end anchor

Xem thêm Câu hỏi thường gặp về SO Regex ; Xin vui lòng cho tôi biết, nếu nó thất bại.


5

Tìm thấy reg này ở đây

^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$

Điều này xác nhận định dạng mm/dd/yyyyvà ngày hợp lệ chính xác (nhưng không m/d/yyyy).

Một số bài kiểm tra


1
Chỉ hoạt động trước năm 2014, phải thay đổi | 20 (0 [0-9] | 1 [0-4]))) thành | 20 (0 [0-9] | 1 [0-9]))) để hỗ trợ cho đến khi 2019
Tony Dong

5
"^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.]((19|20)\\d\\d)$"

sẽ xác nhận bất kỳ ngày nào giữa 1900-2099


5

Biểu thức sau đây rất hay và dễ thao tác:

((((0[13578]|1[02])(\/|-|.)(0[1-9]|1[0-9]|2[0-9]|3[01]))|((0[469]|11)(\/|-|.)(0[1-9]|1[0-9]|2[0-9]|3[0]))|((02)((\/|-|.)(0[1-9]|1[0-9]|2[0-8]))))(\/|-|.)(19([6-9][0-9])|20(0[0-9]|1[0-4])))|((02)(\/|-|.)(29)(\/|-|.)(19(6[048]|7[26]|8[048]|9[26])|20(0[048]|1[26])))

Nó xác nhận hợp lệ theo định dạng MM / dd / YYYY và cho phép hỗ trợ năm nhuận từ năm 1960 đến 2016. Nếu bạn cần hỗ trợ năm nhuận, bạn chỉ cần thao tác phần này của biểu thức:

(19(6[048]|7[26]|8[048]|9[26])|20(0[048]|1[26]))

Hy vọng điều này đã giúp bạn rất nhiều


3

Một câu trả lời khác xác nhận ngày (dd) tùy thuộc vào tháng (mm) và năm (yyyy) (nghĩa là cũng xác nhận ngày 29 tháng 2 trong năm nhuận) và cho phép các năm từ 0001 đến 9999 (0000 trong một năm không hợp lệ theo Gregorian lịch)

^(?:(?:(?:0[1-9]|[12]\d|3[01])/(?:0[13578]|1[02])|(?:0[1-9]|[12]\d|30)/(?:0[469]|11)|(?:0[1-9]|1\d|2[0-8])/02)/(?!0000)\d{4}|(?:(?:0[1-9]|[12]\d)/02/(?:(?!0000)(?:[02468][048]|[13579][26])00|(?!..00)\d{2}(?:[02468][048]|[13579][26]))))$

1
không xác thực 18/05/0017

1

Tôi đang làm việc với một API chỉ chấp nhận định dạng MM / DD / YYYY. Tôi không thể tìm thấy bất kỳ bài đăng nào khác đã thực hiện nhiều năm cũng như câu trả lời của Ofir , vì vậy tôi đã điều chỉnh nó và đăng lại nó ở đây cho bất cứ ai có thể cần nó.

/^(?:(?:(?:0[13578]|1[02])(\/)31)\1|(?:(?:0[1,3-9]|1[0-2])(\/)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:02(\/)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/)(?:0[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/

0
((((0[13578]|1[02])\/(0[1-9]|1[0-9]|2[0-9]|3[01]))|((0[469]|11)\/(0[1-9]|1[0-9]|2[0-9]|3[0]))|((02)(\/(0[1-9]|1[0-9]|2[0-8]))))\/(19([6-9][0-9])|20([0-9][0-9])))|((02)\/(29)\/(19(6[048]|7[26]|8[048]|9[26])|20(0[048]|1[26]|2[048])))

sẽ xác MM/DD/YYYYđịnh dạng với 1960tới2028

nếu bạn cần gia hạn hỗ trợ năm nhuận thì hãy thêm

19(6[048]|7[26]|8[048]|9[26])|20(0[048]|1[26]|2[048]|3[26]|4[048])))

đây cũng là công việc

^((((0[13578]|1[02])[/](0[1-9]|1[0-9]|2[0-9]|3[01]))|((0[469]|11)[/](0[1-9]|1[0-9]|2[0-9]|3[0]))|((02)([/](0[1-9]|1[0-9]|2[0-8]))))[/](19([6-9][0-9])|20([0-9][0-9])))|((02)[/](29)[/](19(6[048]|7[26]|8[048]|9[26])|20(0[048]|1[26]|2[048])))

nếu bạn có thể thay đổi định dạng mm-dd-yyyythay [/][-] kiểm tra trực tuyến http://regexr.com/


0

Đối với ngày MM / DD / YYYY bạn có thể sử dụng

^((((0[13578])|([13578])|(1[02]))[\/](([1-9])|([0-2][0-9])|(3[01])))|(((0[469])|([469])|(11))[\/](([1-9])|([0-2][0-9])|(30)))|((2|02)[\/](([1-9])|([0-2][0-9]))))[\/]\d{4}$|^\d{4}$

Nó xác minh ngày và bướm đêm thích hợp.

Lưu ý rằng bạn có thể kiểm tra biểu thức chính quy của mình tại

regex101

mà tôi đề nghị :)

Chúc vui vẻ!


0
^(((([13578]|0[13578]|1[02])[-](0[1-9]|[1-9]|1[0-9]|2[0-9]|3[01]))|(([469]|0[469]|11)[-]([1-9]|1[0-9]|2[0-9]|3[0]))|((2|02)([-](0[1-9]|1[0-9]|2[0-8]))))[-](19([6-9][0-9])|20([0-9][0-9])))|((02)[-](29)[-](19(6[048]|7[26]|8[048]|9[26])|20(0[048]|1[26]|2[048])))

regex này sẽ xác nhận ngày ở định dạng:

12-30-2016 (mm-dd-yyyy) hoặc 12-3-2016 (mm-d-yyyy) hoặc 1-3-2016 (md-yyyy) hoặc 1-30-2016 (m-dd-yyyy)


0

Tôi biết đó là một câu trả lời tiếp tuyến cho câu hỏi, nhưng nếu ý định của câu hỏi là 'làm thế nào để tôi xác nhận một ngày?', Thì tại sao không thử để ngôn ngữ lập trình làm tất cả công việc khó khăn (nếu bạn đang sử dụng một ngôn ngữ có thể)?

ví dụ như trong php

$this_date_object = date_create($this_date);

if ($this_date_object == false )
    {

        // process the error

    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.