Regex dla daty i godziny DD.MM.YY HH:mm:ss

0

Może ktoś mi powiedzieć jak powinien wyglądać prawidłowy regex dla daty i godziny DD.MM.YY HHss?

Coś mi nie idzie

0

tak przerobiłem i działa

/^([1-9]|([012][0-9])|(3[01])).([0]{0,1}[1-9]|1[012]).\d\d\d\d [012]{0,1}[0-9]:[0-6][0-9]:[0-6][0-9]$/;

dziękuję :)

4

Parsowanie daty regexpem jest średnie, bo poprawna data nie składa się z klas znaków (jak np liczby, litery), tylko z konkretnych wartości . Np 28 jest poprawnym dniem, ale 82 już nie.

Poza tym dochodzą inne reguły, jak np to że w niektórych latach 29 lutego jest poprawny, w innych nie.

Więc ja użyłbym regexpa wpuszczającego wszystkie liczby:

/\d\d\.\d\d\.\d\d \d\d:\d\d:\d\d/

A resztę walidacji zrobił w języku programowania.

Przerobienie tego na taki hardcore:

DuzaCzarna napisał(a):

/^([1-9]|([012][0-9])|(3[01])).([0]{0,1}[1-9]|1[012]).\d\d\d\d [012]{0,1}[0-9]:[0-6][0-9]:[0-6][0-9]$/;

...jest dla masochistów.

0

Jeśli chodzi o liczby, to mona obsłużyć poprzez warianty.

Numer dnia od 1 do 31 może mieć takie warianty:

  • Pojedyncza cyfra od 1 do 9.
  • Pierwsza cyfra od 0 do 2, druga cyfra od 0 do 9.
  • Pierwsza cyfra 3, druga cyfra od 0 do 1.

Z powyższego, wyrażenie będzie miało postać: ([0-9])|([0-2][0-9])|(3[0-1])

Numer miesiąca i numer godziny można przedstawić w sposób analogiczny. Rok może mieć dowolne dwie cyfry. Minuta i sekunda, to pierwsza cyfra od 0 do 5, druga dowolna, ewentualnie jedna cyfra dowolna. W tym przypadku w języku programowania pozostaje tylko sprawdzić poprawność daty, bo takie wyrażenie zakłada możliwość istnienia 31 dni dla każdego miesiąca.

Wyrażenie będzie skomplikowane, ale nie wiem, czy istnieją programy, które powalają automatycznie rozłożyć wyrażenie na elementy i złożyć z powrotem. Wyrażenie przedstawione przez DuzaCzarna jest trochę nieczytelne, ale po rozłożeniu staje się przejrzyste (rozłożenie to dopisanie spacji i enterów w odpowiednie miejsca, a złożenie to usunięcie tych znaków):

^
(
 [1-9]
 |
 ([012][0-9])
 |
 (3[01])
)
.
(
 [0]{0,1}[1-9]
 |
 1[012]
)
.
\d\d\d\d

[012]{0,1}[0-9]
:
[0-6][0-9]
:
[0-6][0-9]
$

1 użytkowników online, w tym zalogowanych: 0, gości: 1