Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Duvidas

Na aula tá proposto o seguinte:

No entanto, para ser uma data, isso é muito abrangente e por isso definimos nossa própria classe de dígitos, mais específica:

[0-3]?\d
Isso pega os dias com um ou dois dígitos, mas o primeiro dia pode ser apenas 0, 1, 2 ou 3. Dentro da classe até podemos deixar isso mais explicito

@NICO STEPAT ,nao entendi o porque do 0-3, porque se for data, na regra teria que PRIMEIRO DÍGITO SER DE "0 a 3" para nao existir datas inexistentes, seria isso, nao entendi muito bem....

4 respostas

Olá, Fabiano.

Se entendi direito sua dúvida, o [0-3]? foi usado para pegar o primeiro dígito (opcional se a data for do dia 1 ao dia 9 do mês e escrito sem 0, por isso o ?).

Por exemplo: Dia 05 ou somente 5, a regex vai pegar os dois casos por causa do ?.

E se for do dia 10 em diante, até dia 31, sempre vai ser usada essa primeira parte da expressão porque o primeiro dígito deixou de ser opcional.

Tem diversas outras formas de digitar essa regex e obter o mesmo resultado, mas o instrutor preferiu dessa forma.

nao foi bem isso.

Oi Fabiano,

estou aqui para te ajudar :). Nem sempre consigo responder todas as duvidas a tempo, mas me empenho para tal.

Sobre a sua duvida:

No video eu uso a expressão [1-3]?\d, mas [0-3?]\d tbm vale. A ideia é pegar os dias como:

04
11
24
30
2

Sempre tem mais do que um caminho para definir uma expressão, mas o meu raciocino foi pegar o primeiro caracter que deve ser 0,1,2,3 (e é opcional) e o segundo caracter deve ser um digito.

Isso nao resolve tudo pois seria possível criar uma data com um dia 39, por exemplo.

abs, Nico Steppat

solução!

É bem nessa linha que o Thiago disse mesmo. Tá certinho. Só vou escrever com mais detalhes...

Na regex...

[0-3]?\d

Estamos dizendo: "Pode existir ou não um número entre 0 e 3 (ou seja 0, 1, 2, 3) e na sequência virá qualquer outro dígito."

Então, os seguintes textos dão match com a regex:

1
9
01
09
10
19
20
29
30
31

Todos os dias do mês estão ali. Porém, essa regex deixa passar outros textos que também seguem essa regra, veja:

0
00
32
39

Então essa regex pode dar match com alguns dias inexistentes.