Expressão regular para o formato de hora HH: MM correspondente

166

Eu quero um regexp para combinar o tempo no formato HH: MM. Aqui está o que eu tenho e funciona:

^[0-2][0-3]:[0-5][0-9]$

Isso corresponde a tudo, das 00:00 às 23:59.

No entanto, quero alterá-lo para que 0:00 e 1:00, etc, também sejam correspondidos, bem como 00:00 e 01:30. Ou seja, para tornar opcional o dígito mais à esquerda, para coincidir com HH: MM e H: MM.

Alguma idéia de como fazer essa mudança? Eu preciso disso para trabalhar em javascript, bem como php.

Click Voto a favor
fonte
15
Na verdade o seu regexp original não irá corresponder a toda uma gama de valores de tempo válidos, por exemplo, 17:00
David Clarke

Respostas:

366

Sua expressão regular original tem falhas: não corresponderia, 04:00por exemplo.

Isso pode funcionar melhor:

^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$
Peter O.
fonte
45
Este regExp é para um tempo sem zero à esquerda. RegExp para o tempo com zero à esquerda é^([0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
SergO 31/01
15
@SergO, leia sua resposta com mais cuidado. Sua resposta é para um zero à esquerda e um à esquerda.
Alexander Alexander
11
Uma forma um pouco menor é^(?:\d|[01]\d|2[0-3]):[0-5]\d$
Billy Jo
2
Funciona bem em C # também.
Richard Ev
10
@SergO não deveria ser ^ (0 [0-9] | 1 [0-9] | 2 [0-3]): [0-5] [0-9] $?
Martin
58

Expressões regulares para o tempo

  • HH: formato MM de 12 horas, 0 principal opcional

    /^(0?[1-9]|1[0-2]):[0-5][0-9]\d$/
  • HH: MM formato de 12 horas, 0 à esquerda opcional, meridiems obrigatórios (AM / PM)

    /((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))/
  • HH: MM 24 horas com 0 à esquerda

    /^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • HH: formato MM de 24 horas, 0 opcional opcional

    /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • HH: MM: SS formato de 24 horas com 0 inicial

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

Referência e demonstração

Niket Pathak
fonte
4
Obrigado! Esta resposta deve estar no topo.
Marc
Qualquer motivo HH: MM 24 horas com 0 à esquerda não é ^([0-2][0-3]|[0-1][0-9]):[0-5][0-9]+$?
Vlad Macovei
Porque o regex na resposta funciona bem. E o que você comentou também funciona. Sinta-se livre para usar qualquer um deles. :)
Niket Pathak
Para pessoas que combinam seqüências de caracteres de 12 horas (com am / pm) com a regex acima, lembre-se de que testar "13:00 PM" em relação à regex retornará true (alguns valores) porque a parte "15:00" na string é válido. Eu resolvi o problema usando a seguinte instrução if let res = value.match (regex); if (res && res [0] === valor) doSomething ();
Taha Rehman Siddiqui
49

Nenhuma das opções acima funcionou para mim. No final, eu usei:

^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$ (js engine)

Lógica:

O primeiro número (horas) é: um número entre 0 e 19 -> [0-1]?[0-9](permitindo um número de dígito único)
ou
um número entre 20 - 23 ->2[0-3]

o segundo número (minutos) é sempre um número entre 00 e 59 -> [0-5][0-9](não permitindo um único dígito)

Tomer
fonte
8
Você não precisa o traço no primeiro colchete, [01]funciona tão bem;)
Czechnology
3
Aqui está esta resposta revisada para aceitar apenas 12 horas de tempo (incluindo zeros à esquerda opcionais):^(0?[1-9]|1[0-2]):[0-5][0-9]$
rgbflawed
^([0-1][0-9]|2[0-3]):[0-5][0-9]$forçar um zero à esquerda
Manan Mehta
8

Você pode usar este 24H, segundos são opcionais

^([0-1]?[0-9]|[2][0-3]):([0-5][0-9])(:[0-5][0-9])?$
Bahman Khalafi
fonte
4

O melhor seria para HH: MM sem correr nenhum risco.

^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
Nikhil Rawat
fonte
isso poderia ser reduzido para ^([0-1]\d|2[0-3]):[0-5]\d$?
AlbinoDrought
3

Surpreendentemente, descobri que, na verdade, tudo isso não é suficiente, pois não funciona para um formato mais curto à meia-noite de 0: 0 e alguns também não funcionam para 00:00, usei e testei o seguinte:

^([0-9]|0[0-9]|1?[0-9]|2[0-3]):[0-5]?[0-9]$
user3229770
fonte
2

Você pode usar esta expressão regular:

^(2[0-3]|[01]?[0-9]):([1-5]{1}[0-9])$

Se você deseja excluir 00:00, pode usar esta expressão

^(2[0-3]|[01]?[0-9]):(0[1-9]{1}|[1-5]{1}[0-9])$

A segunda expressão é a melhor opção, pois o tempo válido é de 00:01 a 00:59 ou de 0:01 a 23:59. Você pode usar qualquer um destes conforme sua exigência. Link Regex101

Ved
fonte
A primeira expressão não aceita 00: 05 . Mas obrigada. Me leva à validação que eu estava procurando.
Jazz
2

Partidas:

2: 9
2:09
2:59
02: 9
02:09
02:59
23:59

Use-o:

^([0-9]|0[0-9]|1[0-9]|2[0-3]):([0-9]|[0-5][0-9])$
Pedram Ahmadpour
fonte
que tipo de tempo é 2: 9 ou 02: 9?
vs97 28/07/19
por exemplo, em C #, existem muitas opções para converter o objeto DateTime em string. DateTime date1 = new DateTime(2008, 1, 1, 6, 9, 1); Console.WriteLine(date1.ToString("H:mm:ss", CultureInfo.InvariantCulture)); // Displays 6:09:01 . para obter mais informações, consulte o link
Pedram Ahmadpour
1

Como você pediu a esquerda mais opcional, eu fiz a esquerda e direita mais opcional também, confira

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

Combina com

0:0 
00:00
00:0 
0:00
23:59
01:00
00:59

O link ao vivo está disponível aqui

gdmanandamohon
fonte
0

Você pode usar o seguinte regex:

^[0-1][0-9]:[0-5][0-9]$|^[2][0-3]:[0-5][0-9]$|^[2][3]:[0][0]$
Basavaraj
fonte
0

Declarar

private static final String TIME24HOURS_PATTERN = "([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]";

public boolean validate(final String time) {
    pattern = Pattern.compile(TIME24HOURS_PATTERN);
    matcher = pattern.matcher(time);
    return matcher.matches();
}

Este método retorna "true" quando String corresponde à Expressão Regular.

user3481495
fonte
0

Uma pequena modificação na contribuição de Manish M Demblani acima lida com as 4 da manhã (eu me livrei da seção de segundos porque não preciso dela no meu aplicativo)

^(([0-1]{0,1}[0-9]( )?(AM|am|aM|Am|PM|pm|pM|Pm))|(([0]?[1-9]|1[0-2])(:|\.)[0-5][0-9]( )?(AM|am|aM|Am|PM|pm|pM|Pm))|(([0]?[0-9]|1[0-9]|2[0-3])(:|\.)[0-5][0-9]))$

manipula: 04:00 04:00 04:00 04:00 04:30 etc ..

Bob Light
fonte
1
AM|am|aM|Am|PM|pm|pM|Pm=[AaPp][Mm]
Ed Morton
0

O regex abaixo ajudará a validar o formato hh: mm

^([0-1][0-9]|2[0-3]):[0-5][0-9]$
TobiasDeVil
fonte
-1

O meu é:

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

Isso é muito mais curto

Testei com vários exemplos

Combine:

  • 00:00
  • 7:43
  • 07:43
  • 19:00
  • 18:23

E não corresponde a nenhuma instância inválida, como 25:76, etc.


fonte
09:30não correspondem
Verde
Seus próprios exemplos 00:00 e 07:43 não são correspondentes.
Christiaan Westerbeek
-1

Você pode tentar o seguinte

^\d{1,2}([:.]?\d{1,2})?([ ]?[a|p]m)?$

Ele pode detectar os seguintes padrões:

2300 
23:00 
4 am 
4am 
4pm 
4 pm
04:30pm 
04:30 pm 
4:30pm 
4:30 pm
04.30pm
04.30 pm
4.30pm
4.30 pm
23:59 
0000 
00:00
Manish M Demblani
fonte
-1

verifique este regex de detector de carimbo de data / hora que eu criei para procurar um carimbo de data / hora especificado pelo usuário, exemplos do que ele incluirá, mas definitivamente não é limitado a;

8:30-9:40
09:40-09 : 50
09 : 40-09 : 50
09:40 - 09 : 50
08:00to05:00
08 : 00to05 : 00
08:00 to 05:00
8am-09pm
08h00 till 17h00
8pm-5am
08h00,21h00
06pm untill 9am

Também coletará muito mais, desde que os horários incluam dígitos

pythonian29033
fonte
1
RegExr requires a modern browser. Please update your browser to the latest version and try again.... nem consigo ver ...: - /
Martin Tournoij
-3

Tente o seguinte

^([0-2][0-3]:[0-5][0-9])|(0?[0-9]:[0-5][0-9])$

Nota: Eu estava assumindo o mecanismo de regex javascript. Se for diferente, informe-me.

JaredPar
fonte
-3

Você pode usar o seguinte regex:

^[0-2]?[0-3]:[0-5][0-9]$

Apenas a modificação que fiz é o dígito mais à esquerda é opcional. O restante da regex é o mesmo.

Shekhar
fonte