3
respostas

Restringir os dígitos da hora entre 00h e 23h ou 0h e 23h

Na atividade :

No vídeo vimos como definir uma regex para encontrar a data. Agora precisamos garantir que o nosso usuário preencha uma data que siga esse padrão: 19h32min16s.

A reposta da questão foi: \d{2}h\d{2}min\d{2}s

Uma outra sugestão dada foi: \d{1,2}h\d{1,2}min\d{1,2}s

Mas nenhuma delas restringe o cara entrar com uma data com um formato errado como esse: 32h70min80s.

Tenho a impressão que ficaria mais correto para o que pede, desta forma:

[012]\dh[0-5]\dmin[0-5]\ds. Assim limitaria a entrada para uma hora correto no formato. O que acham? Mas não funcionaria para o caso de uma hora nesse formato: 3h2min48s, por exemplo.

3 respostas

Bom dia,

Uma sugestão seria essa aqui também. Um pouco mais verbosa, porém bem restritiva ao caso do horário:

^([0-9]|0[0-9]|1[0-9]|2[0-3])h[0-5][0-9]min[0-5][0-9]seg$

Abraço

Carlos, me surgiu essa mesma questão. No meu caso, eu gostaria que o padrão fosse o valor dentro de 1 dia, ou seja de 00h00m00s até 23h59m59s. O meu regex foi o seguinte:

[012]\dh[0-5]\dmin[0-5]\ds

Veja então que é aceito apenas 0 ou 1 ou 2 no primeiro dígito e de 0 a 9 no segundo dígito. O problema está justamento no segundo dígito. Eu não posso limitar para por exemplo [0-3] por que não funcionaria se fosse por exemplo um número 4, 5,6, etc... que são válidos.

A questão então é o regex respeitar o pattern [012]\d, porém o resultado deste pattern não pode ser maior que 23, sendo então de 0-23.

Yuri, o seu pattern não funcionou aqui no meu teste.

Olá Alexandre,

Eu testei a solução do Yuri aqui: https://regex101.com/ e funciona. Sendo que, como ele falou a dele está bem restritiva para as formas de entrada de dados. Realmente sua sugestão [1] funciona perfeitamente para o padrão pedido. Além disso, fiz uma adaptação da REgex do Yuri [2] e dessa forma também funciona para padrão pedido.

[1] - [012][0-23]h[0-5]\dmin[0-5]\dseg 
[2] - ([01][0-9]|2[0-3])h[0-5][0-9]min[0-5]\dseg