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

Expressão regular aceitando erro

Ola, mesmo utilizando o metodo ensinado pelo Flávio para o fail fast, caso eu coloque na data, o mes ou o dia errado, o sistema continua funcionando da mesma forma, como descrito abaixo:

static textoParaData(texto) {

        if(!/\d{4}-\d{2}-\d{2}/.test(texto)) {
            throw new Error("Numero esta fora do formato");
        }
        return new Date(...texto.split('-').map((item,indice) => item - indice % 2));

    }

Console Chrome:

DateHelper.textoParaData("2017-09-04595");
Sun Mar 31 2030 00:00:00 GMT-0300 (Hora oficial do Brasil)
DateHelper.textoParaData("207-09-04595");
DateHelper.js:13 Uncaught Error: Numero esta fora do formato
    at Function.textoParaData (DateHelper.js:13)
    at <anonymous>:1:12
textoParaData @ DateHelper.js:13
(anonymous) @ VM6775:1
DateHelper.textoParaData("2077-09-04595");
Fri Mar 31 2090 00:00:00 GMT-0300 (Hora oficial do Brasil)

Obrigado!

4 respostas
solução!

Olá, para corrigir esse problema você pode determinar o início e o fim da expressão regular.

/^\d{4}-\d{2}-\d{2}$/

Quando você testava com o dia inválido, a expressão regular ainda dava match, porque ela encontrava os dois dígitos finais.

Boa Rafaela,

Não sabia disto, entao quando não coloco o inicio e o fim da expressão regular, se um dos números dar match ele responde como true?

Obrigado!

Sim, no caso, o problema eram os dois dígitos finais, como não havia um limite final, a expressão verificava se continha os dois dígitos, por isso, esse valor "2017-09-04595" era válido. Esse site é muito bom para validar expressões regulares https://regexr.com/.

Humm, entendi! Muito Obrigado Rafaela!