Expressão regular para correspondência do formato de hora HH: MM

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

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

Isso combina com tudo, das 00:00 às 23:59.

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

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

Sua expressão regular original tem falhas: ela não corresponde às 04:00 por exemplo.

Isso pode funcionar melhor:

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

Nenhum dos 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 único dígito)
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)

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

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

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

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

Surpreendentemente eu achei realmente todos estes não cobri-lo completamente, como eles não funcionam para a meia-noite formato menor de 0: 0 e alguns não funcionam para 00:00, eu usei e testei o seguinte:

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

Você pode usar esta expressão regular:

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

Se você quiser excluir 00:00, você 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 porque o horário válido é de 00:01 a 00:59 ou de 0:01 a 23:59. Você pode usar qualquer um deles conforme sua necessidade. Link Regex101

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

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 combina com a Expressão Regular.

Fósforos:

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

Como você pediu o bit mais à esquerda opcional, eu fiz mais à esquerda e mais certo bit 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

Uma ligeira modificação na contribuição de Manish M Demblani acima das 4 da manhã (eu me livrei da seção de segundos porque não preciso disso na minha aplicação)

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

alças: 04:00 04:00 04:00 04:00 04:00 horas 04:30 am etc.

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

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

Expressões Regulares pelo Tempo

  • Formato HH: MM de 12 horas, Leading 0 opcional

     /^(0?[1-9]|1[0-2]):[0-5][0-9]$/ 
  • HH: Formato MM de 12 horas, 0 opcional, Meridianos Mandatários (AM / PM)

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

     /^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/ 
  • Formato HH: MM de 24 horas, 0 de avanço 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 principais

      /(?:[01]\d|2[0123]):(?:[012345]\d):(?:[012345]\d)/ 

Referência e demonstração

O meu é:

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

Isso é muito mais curto

Foi testado 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 …

Você pode tentar o seguinte

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

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 

verifique este regex de detector de registro de data e hora masterfull que construí para procurar um registro de data e hora especificado pelo usuário, exemplos do que ele includeá, mas definitivamente NÃO está 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 vai pegar muito mais, contanto que os tempos incluam dígitos

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. Resto do regex é o mesmo.

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 de javascript. Se for diferente, por favor me avise.