1
resposta

[Dúvida] Desse jeito tem funcionado, porém é o melhor método?

Gostaria de saber se esse é o método mais efetivo para a resolução ou teria algum mais "Sênior" de fazer...

import re

name = str(input("Enter the name:\n"))
name_pattern = r'[a-zA-Z]'
result = re.search(name_pattern,name)

if result:
    print("Valid name!")
else:
    print("Invalid name!")
1 resposta

Oi, João Victor! Tudo bem?

No desenvolvimento, o termo "sênior" muitas vezes está ligado a escolher a lógica que melhor previne erros e cobre todos os cenários possíveis (os famosos edge cases).

Analisando a sua solução e a do instrutor, existem pontos importantes sobre como as Expressões Regulares (Regex) funcionam no Python.

re.search vs re.fullmatch:

No seu código, você utilizou o re.search com o padrão r'[a-zA-Z]'.

  • O que o seu código faz: O re.search varre a string e retorna verdadeiro se encontrar pelo menos uma letra em qualquer lugar do texto.
  • O problema: Se o usuário digitar maria123, o programa dirá que o nome é válido, pois ele encontrou as letras de "maria", mesmo que existam números e o nome comece com letra minúscula.

Já a solução do instrutor utiliza o re.fullmatch:

  • O que ele faz: Exige que a string inteira, do começo ao fim, siga exatamente o padrão.
  • A regex r'[A-Z][a-z]*': Garante que a primeira letra seja maiúscula e que o restante sejam apenas letras minúsculas.

Pra elevar o nível do código, precisamos lidar com nomes compostos (como "Ana Maria") ou nomes com acentuação, que o padrão [a-z] não reconhece por padrão.

Uma estrutura que lida melhor com a validação seria:

import re

def validar_nome(nome):
    # O padrão abaixo permite:
    # 1. Primeira letra maiúscula
    # 2. Letras subsequentes (incluindo acentos)
    # 3. Espaços para nomes compostos
    padrao = r'^[A-ZÀ-Ú][a-zà-ú]*(\s[A-ZÀ-Ú][a-zà-ú]*)*$'
    
    if re.fullmatch(padrao, nome):
        return True
    return False

nome_cliente = input("Digite o nome do cliente para validação: ").strip()

if validar_nome(nome_cliente):
    print("Nome válido!")
else:
    print("Nome inválido!")

Por que essa estrutura é interessante?

  1. Uso de funções: Organizar a lógica em uma função (validar_nome) torna o código limpo e fácil de reutilizar.
  2. Método .strip(): Remove espaços em branco acidentais no início ou fim da digitação, evitando que um espaço bobo invalide o nome.
  3. Regex abrangente: O padrão que sugeri acima aceita nomes como "João" ou "Ana Maria", que são comuns e seriam barrados pela regex inicial.

O caminho para uma solução mais madura é sempre pensar: "Como o usuário pode quebrar meu programa?". Testar ajuda a refinar essa lógica.

Espero que isso ajude nos seus estudos.

Conteúdos relacionados
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!