Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Olá Vitor! Tudo bem?
Como você não compartilhou o código que é implementado a validação não consigo lhe apontar se o problema está no código e na forma que você inseriu a informações do telefone ou somente em uma das alternativas.
Mas, levando como ponto de partida que você implementou a sua validação exatamente igual como a desenvolvida durante a aula, o problema da validação está na estrutura de como você passou o número do telefone.
Pois o regex, [0-9]{2} [0-9]{5}-[0-9]{4}, usado na validação, espera que você passe exatamente a estrutura 85 98765-0908. Então peço que teste utiliza essa estrutura que compartilhei no seu campo "Celular", porém, caso não resolva, peço que compartilhe todo o seu projeto, via GitHub ou Drive do Google para que eu teste.
No mais, bons estudos!
#VALIDATORS
import re
def cpf_invalido(CPF):
return len(CPF) != 11
def nome_invalido(Nome):
return not Nome.isalpha()
def celular_invalido(Celular):
padrao = f'[0-9]{2} [0-9]{5}-[0-9]{4}'
resposta = re.findall(padrao,Celular)
return not resposta
#SERIALIZERS
class EstudantesSerializer(serializers.ModelSerializer):
class Meta:
model = Estudantes
fields = ['id','Nome','Email','CPF','Data_Nascimento','Celular']
def validate(self,dados):
if cpf_invalido(dados['CPF']):
raise serializers.ValidationError({'CPF':'O CPF deve ter 11 digitos!'})
if nome_invalido(dados['Nome']):
raise serializers.ValidationError({'Nome':'Nome apenas com letras'})
if celular_invalido(dados['Celular']):
raise serializers.ValidationError({'Celular':'Celular com 13 numeros'})
return dados
Bom dia, Vitor! Joia?
Analisando o seu código percebi que o problema na validação está acontecendo porque você deixou o "f" no início da string que a variável padrao que está na função celular_invalido.
O "f" no formato que você deixou é uma forma de apontar para o Python que o que estiver dentro de "{}" poderá ser formatado ou será uma variável, mas no seu caso é o valor do regex na identificação de um número de telefone.
Com isso, para solucionar o problema basta retirar o "f". Sua função celular_invalido deve ficar assim:
def celular_invalido(Celular):
padrao = '[0-9]{2} [0-9]{5}-[0-9]{4}'
resposta = re.findall(padrao,Celular)
return not resposta
Espero que dê tudo certo dessa vez!
Muito obrigado, funcionou perfeitamente, não tinha me atentado a esse detalhe.