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

Expressão CNPJ

Boa Noite pessoal:

Uma dúvida nesse exemplo, tenho a string 00.000.000/0000-00 até ai tudo certo com a expressão. Mas se o arquivo estiver errado e o conteúdo estiver da seguinte forma: 000.000.000/0000-00. Tem um caracter a mais no inicio. Se utilizar dessa forma a expressão (\d{2}.\d{3}.\d{3}\/\d{4}-\d{2}) irá pegar esse conteúdo também. Como faço para pegar somente o que tenha dois caracteres iniciais ? Grato ...

3 respostas

Boa noite, William! Tudo bem, cara? =)

Antes de responder sua dúvida, só fazendo uma pequena correção... O código que você escreveu é esse:

(\d{2}.\d{3}.\d{3}\/\d{4}-\d{2})

Você lembra o que o . (ponto) faz em uma RegEx? =)

O . é uma classe que representa, basicamente, qualquer caractere, ou seja, o seguinte conteúdo será pego:

00a00a000/0000-00

Para dar match em pontos, devemos escapar esse caractere, assim:

(\d{2}\.\d{3}\.\d{3}\/\d{4}-\d{2})

E, finalmente... Para sua dúvida, propriamente dito, para dizer que esse é o começo e o fim da expressão, podemos usar o ^ e o $, assim:

^(\d{2}\.\d{3}\.\d{3}\/\d{4}-\d{2})$

Fazendo isso, se houver algum caractere imediatamente antes ou depois, a expressão inteira será invalidada. =)

Espero ter ajudado, mas qualquer coisa não deixe de postar por aqui para que possamos continuar ajudando até resolvermos seu problema. =)

Abraço e bons estudos,

Fábio

Bom Dia Fábio, blz

Já estava meio zonzo de tanta coisa que tinha visto já que acabei esquecendo a barra no ponto ... rs. Mas depois percebi e tinha corrigido. Entendi a questão do inicio e fim mas se por acaso eu carregar uma linha de um arquivo na variável e nela conter em 3 lugares um cnpj (por exemplo: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx00.000.000/0000-00 xxxxx xxxxxxx xxxxxx xxxxxx 000.000.000/0000-00 xxxxx x x x xxxxxxxx x xxx00.000.000/0000-00 xxxxx) Nesse caso um dos cnpj está com um digito a mais no inicio. Pelo exemplo que fiz (utilizando a ferramenta do curso) se montar a expressão do cnpj vai achar as 3 informações. Se inserir o ^ e $ não encontra mais nada.

Grato ..

solução!

William,

Acho que agora entendi seu problema um pouco melhor...

No exemplo que você citou, não está havendo nenhum match, pois o primeiro e terceiro CNPJ's estão com um caractere a mais no início, um "x". Já o segundo está com um dígito, mesmo...

Se o seu interesse é que o CNPJ não tenha apenas um dígito a mais, você pode usar o \D, que é uma classe que realiza o match em qualquer caractere que não seja um dígito, assim:

\D(\d{2}\.\d{3}\.\d{3}\/\d{4}-\d{2})\D

Você poderia testar e ver se é realmente isso que você quer? =)

Abraço e bons estudos,

Fábio