Wyrażenie regularne do dopasowywania czasu w formacie wojskowym (24 godziny)

Chciałbym mieć Wyrażenie regularne JavaScript, które dopasuje czas używając zegara 24-godzinnego, gdzie czas jest podawany z dwukropkiem lub bez niego.

Na przykład, chciałbym dopasować czas w następujących formatach:

  • 0800
  • 23:45
  • 2345

Ale to nie pasuje do nieprawidłowych czasów, takich jak

  • 34:68
  • 5672
Author: Alan Moore, 2009-09-30

11 answers

To powinno wystarczyć:

^([01]\d|2[0-3]):?([0-5]\d)$

Wyrażenie brzmi:

^        Start of string (anchor)
(        begin capturing group
  [01]   a "0" or "1"
  \d     any digit
 |       or
  2[0-3] "2" followed by a character between 0 and 3 inclusive
)        end capturing group
:?       optional colon
(        start capturing
  [0-5]  character between 0 and 5
  \d     digit
)        end group
$        end of string anchor
 97
Author: Greg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-29 20:23:51
/(00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23):?(0|1|2|3|4|5)\d/

:)

 5
Author: Zed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-29 20:22:23

Tutaj jest lepsze rozwiązanie niż najlepsze powyżej dla wojska plus rozwiązanie cywilne.

Wojskowe

^(((([0-1][0-9])|(2[0-3])):?[0-5][0-9])|(24:?00))

Uważam, że or w najwyżej ocenionej odpowiedzi nie parsuje poprawnie podzbiorów przed i po bez dodatkowego zestawu nawiasów do ich grupowania. Ponadto, nie jestem pewien, czy {[2] } jest tylko 0-9 we wszystkich iteracjach. Technicznie zawiera specjalny [[:digit:]], chociaż nigdy wcześniej nie miałem do czynienia z tym problemem. Tak czy inaczej, powinno to zapewnić każdą rzecz w tym zwrotnica 2400/24: 00

Cywilne

^([0-9]|([1][0-2])):[0-5][0-9][[:space:]]?([ap][m]?|[AP][M]?)

Jest to ładna Wersja cywilna, która pozwala na pełny zakres sformatowany jak 12:30pm, 12:30P, 12:30p, 12:30 PM, 12:30 PM, 12:30 P, 12:30 pm, lub 12:30 P, ale wymaga znaków rano lub post meridian być w tym samym przypadku, jeśli oba są włączone (bez Am lub pM).

Używam obu z nich w trochę JavaScript, aby zweryfikować ciągi czasu.

 5
Author: Robert Bolin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-08 15:20:09

Aby dwukropek był opcjonalny i zezwalał na wszystkie poprawne czasy:

([01]\d|2[0-3]):?[0-5]\d

Należy pamiętać, że zakłada się, że północ zawsze będzie 0000, a nigdy 2400.

 2
Author: DocMax,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-29 20:19:20

Oto wpis na blogu, szukający tego samego i kilka potencjalnych odpowiedzi -- większość z nich nie działa, ale jest dobra dyskusja, dlaczego każdy zawodzi.

Oczywiście, wyraźnie długie i dokładne jest zawsze możliwość!

 0
Author: Michael Paulukonis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:29

To właśnie wymyśliłem:

(^((2[0-4])|([01]?[0-9])):[0-5][0-9]$)|(^((1[0-2])|(0?[1-9])(:[0-5][0-9])?) [pa] m$)

Akceptuje:

14: 00 4: 30am 07: 05 AM 18:45 6:19 00:55

Nie akceptuje "00: 05am" - nie jestem pewien, czy jest taki czas jak "0am"

Jeśli uważasz, że": "jest opcjonalne dla formatu czasu 24h (wojskowego) - po prostu dodaj znak zapytania

 0
Author: PaulG,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-12 03:16:32

Wiem, że to stare pytanie, ale oto regex, który wymyśliłem, który wydaje się działać.

^(([[0|1]\d)|(2[0-3]))[:]?([0-5]\d)$

Możesz go edytować na tej stronie regex

Edit Właśnie zdałem sobie sprawę, że ta odpowiedź skończyła się dokładnie tak samo jak zaakceptowana odpowiedź, ale zostawię ją tutaj przynajmniej dla wartości linku "zrób to Sam"

 0
Author: Japheth Ongeri - inkalimeva,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-10 08:39:00

To jest idealne: ^0?([0-9][0-2]?):[0-5][0-9]$

Uwaga: Tylko Zegar 12 Godzin

Na takie czasy jak: 0:01- 12:59

LUB

00:01 - 12:59

 0
Author: Byorn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-11 23:43:56

Myślę, że regex nie jest właściwym rozwiązaniem tego problemu. Jasne, można to zrobić, ale wydaje się to złe.

Upewnij się, że ciąg znaków ma cztery znaki lub 5 znaków z dwukropkiem pośrodku. Następnie przeanalizuj każdą stronę i upewnij się, że lewa strona jest mniejsza niż 24, a prawa ręka jest mniejsza niż 60.

Rozwiązanie regex jest o wiele bardziej skomplikowane.

 -1
Author: Stefan Kendall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-29 20:17:19
/^(?:[01]\d|2[0-3]):?[0-5]\d$/
 -1
Author: Jeremy Stein,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-29 20:21:05

Usuń ':' jeśli łańcuch ma jeden, to jeśli łańcuch ma postać "DDDD", przekształć go w int i porównaj go z 2400.

 -1
Author: David R Tribble,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-29 20:22:35