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.