Regex do walidacji formatu daty dd / mm / rrrr


171

Muszę zweryfikować ciąg daty dla formatu dd/mm/yyyyza pomocą wyrażenia regularnego.

To wyrażenie regularne sprawdza poprawność dd/mm/yyyy, ale nie dotyczy nieprawidłowych dat, takich jak 31/02/4500:

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

Jakie jest prawidłowe wyrażenie regularne do walidacji dd/mm/yyyyformatu z obsługą roku przestępnego?


3
Myślę, że może pomóc, jeśli ustawisz dokładne oczekiwanie, ponieważ to wyrażenie regularne NIE sprawdza poprawnie lat przestępnych; np. nie ma 29 lutego 2013 r., ale to wyrażenie regularne potwierdza, że ​​takie jest prawidłowe: regexr.com?346fp
— TML

7
Dlaczego z Regex? Są łatwiejsze (i dokładniejsze) sposoby ...
— Dan Puzey

2
Wyrażenia regularne służą do dopasowywania wzorców, a nie do sprawdzania wartości liczbowych. Znajdź prawdopodobny ciąg z wyrażeniem regularnym, a następnie sprawdź jego wartość liczbową w dowolnym języku hosta (PHP, cokolwiek).
— Andy Lester

3
Ta odpowiedź została dodana do często zadawanych pytań dotyczących wyrażeń regularnych przepełnienia stosu w sekcji „Typowe zadania sprawdzania poprawności”.
— aliteralmind

4
@BurhanKhalid: Mylisz się. Wyrażenie regularne jest najlepszym narzędziem do walidacji, ponieważ dane wejściowe HTML5 mają atrybut o nazwie, patternktóry przyjmuje wyrażenie regularne, a przeglądarki automatycznie sprawdzają poprawność względem wyrażenia regularnego bez użycia javascript. Wystarczy ustawić wyrażenie regularne w atrybucie wzorca!
— awe

Odpowiedzi:


328

Wklejone wyrażenie regularne nie weryfikuje poprawnie lat przestępnych, ale jest taki, który to robi w tym samym poście . Zmodyfikowałem go, aby wziąć dd/mm/yyyy, dd-mm-yyyylub 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})$

Przetestowałem to trochę w linku podanym przez Arun w jego odpowiedzi, a także tutaj i wydaje się, że działa.

Edycja 14 lutego 2019 r .: Usunąłem przecinek z wyrażenia regularnego, który dopuszczał daty, takie jak 29-0,-11


9
Epickie wyrażenie regularne! Jak łatwo można to zmienić w zależności od formatu? Na przykład rrrr-mm-dd i mm-dd-rrrr. Próbowałem to zrozumieć, mając to na uwadze, ale to wykracza poza moje umiejętności regex.
— mrswadge

7
Poza DD/MM/YYYYtym to wyrażenie regularne również akceptuje, DD/MM/YYco nie jestem pewien, czy było to w pierwotnym zamiarze plakatu. Jeśli nie chcesz obsługiwać „YY”, usuń wszystkie opcjonalne ?kwantyfikatory.
— user1485864

2
@PurveshDesai zastąpić każdy 0?z 0, a także usunąć ostatnie wystąpienie ?.
— Ofir Luzon

4
@MaraisRossouw, Masz rację, dla 4-cyfrowy rok, nie są w rzeczywistości 3 ?, które powinny być usunięte: zastąpienie wszystkich (?:1[6-9]|[2-9]\d)?z (?:1[6-9]|[2-9]\d).
— Ofir Luzon

2
Wpadam tylko po to, żeby to powiedzieć: WOW i oczywiście dziękuję
— Jero Dungog,

266

Rozszerzyłem wyrażenie regularne podane przez @Ofir Luzon dla formatów dd-mmm-RRRR, dd / mmm / RRRR, dd.mmm.RRRR zgodnie z moimi wymaganiami. Każdy, kto ma takie same wymagania, może to skierować

^(?:(?: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})$

i przetestowane pod kątem niektórych przypadków testowych tutaj http://regexr.com/39tr1 .

Aby lepiej zrozumieć to wyrażenie regularne, odnieś się do tego obrazu: wprowadź opis obrazu tutaj


1
Tak, jak to wygenerowałeś? :)
— Razor

Wygenerowałem go online za pomocą jakiejś strony internetowej i teraz nie pamiętam również strony, z której wygenerowałem ten obraz. Dodam odniesienie, gdy tylko sobie przypomnę :)
— Alok Chaudhary

4
@ user3733831 8888to możliwy rok. Spodziewam się żyć mniej więcej w tym wieku.
— Dan Nissenbaum

1
Świetnie sprawdza się nawet w latach przestępnych. Dodałem również obsługę krótkich hiszpańskich nazw miesięcy.
— Fer R

2
@AlokChaudhary, diagram został wygenerowany przy użyciu debuggex.com
— Taha BASRI

69

Ogłoszenie:

Twoje wyrażenie regularne nie działa przez lata, które „są wielokrotnościami 4 i 100, ale nie 400”. Lata, które przechodzą ten test, nie są latami przestępnymi. Na przykład: 1900, 2100, 2200, 2300, 2500 itd. Innymi słowy, umieszcza wszystkie lata w formacie \ d \ d00 w tej samej klasie lat przestępnych, co jest niepoprawne. - MuchToLearn

Więc działa poprawnie tylko dla [1901 - 2099] (Whew) 😊

Dd / mm / rrrr:

Sprawdza rok przestępny. Lata od 1900 do 9999 są ważne. Tylko dd / MM / rrrr

(^(((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
Ta odpowiedź działa tylko z dd / MM / rrrr. Dlatego jest właściwą odpowiedzią.
— Rodrigo,

2
@SylvainB Naprawiłem to
— gdZeus

2
@gdZeus Dzięki za dostarczenie, nawet dwa lata później! Przerażające jest jednak myślenie, że niekompletne rozwiązanie było sprawdzane tutaj przez tak długi czas.
— SylvainB

Aby to przyspieszyć, możesz sprawić, że grupy nie będą grupować. 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

Przypuszczam, że znalazłem błąd: 29/02/2100nie istnieje (rok 2100 NIE jest rokiem przestępnym), ale nadal jest akceptowany przez podany wzorzec.
— KnorxThieus


12

Podejrzewam, że poniższe informacje są tak dokładne, jak można się spodziewać, nie wiedząc, kiedy użytkownik przełączył się z kalendarza juliańskiego na gregoriański.

Akceptuje „-”, „/” lub nic jako separatory między rokiem, miesiącem i dniem, bez względu na kolejność.

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))$

Dd / mm / rrrr:

^(((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))$

rrrrMMdd:

^([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)$

Poza porządkiem wszystkie są zgodne z kalendarzem juliańskim (rok przestępny co cztery lata) aż do 1700 roku, kiedy to kalendarz gregoriański odbiega od juliańskiego. Ma dwa problemy:

  1. Przyjmuje rok 0000, który nie istnieje w wielu, ale nie we wszystkich standardach. Należy zauważyć, że ISO 8601 akceptuje rok 0000 (odpowiednik 1 roku p.n.e.).
  2. Nie pomija 10-13 dni, które zostały utracone, gdy wszedł do użytku kalendarz gregoriański. To zależy jednak od miejscowości. Na przykład Kościół rzymskokatolicki pominął 10 dni, od 5 października do 14 października 1582 r., Ale Grecja (jako ostatnia, która przeszła) pominęła 16 lutego do 28 lutego 1923 r., 13 dni, biorąc pod uwagę lata przestępne 1700, 1800 i 1900.

Zostało to przetestowane w porównaniu z implementacją kalendarza Javy od roku 0001 do roku 9999, z jedyną rozbieżnością, która dotyczy wspomnianych powyżej 10 dni w 1582 roku.


Wyrażenie regularne RRRRMMDD nieprawidłowo pasuje do [01 | 02 | 03 | 05 | 06 | 07 | 09 | 10 | 11 | 13 | 14 | 15] 00-02-29. Poprawione regex: ^([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)$. Testowane w Pythonie: repl.it/repls/DependentBestChapters
— kpr

10

Dla tych, którzy na to patrzą i są całkowicie zdezorientowani, oto fragment mojego scenariusza. Niestety, wszystko, co robi, to dopasowywanie prawidłowych liczb w danych wejściowych daty i czasu, a 31 lutego zostanie oznaczony jako prawidłowy, ale jak wielu powiedziało, regex naprawdę nie jest najlepszym narzędziem do wykonania tego testu.

Aby dopasować datę w formacie „rrrr-MM-dd gg: mm” (lub w dowolnej kolejności)

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;
}

Powyższy skrypt zaczyna się od zbudowania obiektu regex. Następnie znajduje wszystkie wejścia, których identyfikator pasuje do określonego wzorca, a następnie przechodzi przez nie. Nie testuję pierwszego znalezionego wejścia ( if (e > 0)).

Trochę wyjaśnienia:

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

^oznacza początek meczu, natomiast $oznacza koniec meczu.

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

\d+oznacza dopasowanie pojedynczej lub ciągłej sekwencji liczb całkowitych, więc myhtml_element_with_id_56_datetimei myhtml_element_with_id_2_datetimebędzie pasować, ale myhtml_element_with_id_5a_datetimenie będzie


8

Oto kolejna wersja wyrażenia regularnego, która pasuje do dowolnego z następujących formatów daty i umożliwia pominięcie zer wiodących:

Regex: ^[0-3]?[0-9].[0-3]?[0-9].(?:[0-9]{2})?[0-9]{2}$

Mecze:

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

Wizualizacja wyrażeń regularnych

Debuggex Demo


4
nie działa, jeśli masz 13/13/2000= Mecze jest prawdziwe
— Andrei Krasutski

3
39/39/39 to nie randka. Przestań głosować na tę odpowiedź.
— Warren Sergent

6

Tutaj napisałem jeden, dla dd/mm/yyyyktórego separatorem może być -.,/przedział roku0000-9999 .

Zajmuje się latami przestępnymi i jest przeznaczony dla odmian wyrażeń regularnych, które obsługują lookaheads, przechwytywanie grup i odwołań wstecznych. NIE dotyczy takich jak d/m/yyyy. W razie potrzeby dodaj kolejne separatory do[-.,/]

^(?=\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}$

Testuj przy regex101 ; jako ciąg 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}$"

wyjaśnione:

(?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

Zobacz także SO Regex FAQ ; Daj mi znać, jeśli to się nie powiedzie.


5

Znalazłem ten rejestr tutaj

^(((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))))$

To sprawdza poprawność formatu mm/dd/yyyyi poprawnych dat (ale nie m/d/yyyy).

Kilka testów


1
Działa tylko przed 2014 r., Trzeba zmienić | 20 (0 [0-9] | 1 [0-4]))) na | 20 (0 [0-9] | 1 [0-9])), aby obsługiwać do 2019
— Tony Dong

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

zweryfikuje każdą datę pomiędzy 1900-2099


5

Poniższe wyrażenie jest przyjemne i łatwe do manipulowania:

((((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])))

Sprawdza zgodnie z formatem MM / dd / RRRR i umożliwia obsługę lat przestępnych od 1960 do 2016. Jeśli potrzebujesz przedłużenia obsługi lat przestępnych, wystarczy manipulować tą częścią wyrażenia:

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

Mam nadzieję, że to ci bardzo pomogło


3

Inna odpowiedź, która waliduje dzień (dd) w zależności od miesiąca (mm) i roku (rrrr) (tj. Również waliduje 29 lutego w latach przestępnych) i dopuszcza lata od 0001 do 9999 (0000 w roku nieważnym według gregoriańskiego kalendarz)

^(?:(?:(?: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
nie sprawdza poprawności 18/05/0017

1

Pracuję z interfejsem API, który akceptuje tylko format MM / DD / RRRR. Nie mogłem znaleźć żadnego innego postu, który zrobiłby lata przestępne tak dobrze, jak odpowiedź Ofira , więc poprawiłem go i ponownie publikuję tutaj dla każdego, kto może go potrzebować.

/^(?:(?:(?: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])))

potwierdzi MM/DD/YYYYformat za pomocą 1960do2028

jeśli chcesz przedłużyć obsługę roku przestępnego, dodaj

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

to też jest praca

^((((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])))

jeśli możesz zmienić format mm-dd-yyyyniż wymienić, [/]aby [-] sprawdzić również online http://regexr.com/


0

Dla daty MM / DD / RRRR możesz użyć

^((((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}$

Weryfikuje właściwe dni i miesiące.

Pamiętaj, że możesz sprawdzić swoje wyrażenie regularne pod adresem

regex101

co polecam :)

Baw się dobrze!


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])))

to wyrażenie regularne zweryfikuje daty w formacie:

12-30-2016 (mm-dd-rrrr) lub 12-3-2016 (mm-d-rrrr) lub 1-3-2016 (md-rrrr) lub 1-30-2016 (m-dd-rrrr)


0

Wiem, że to styczna odpowiedź na pytanie, ale jeśli chodzi o intencję pytania jest `` jak sprawdzić datę? '', To dlaczego nie spróbować pozwolić językowi programowania wykonać całej ciężkiej pracy (jeśli używasz języka, który mogą)?

np. w php

$this_date_object = date_create($this_date);

if ($this_date_object == false )
    {

        // process the error

    }
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.