Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Se eu terminar o nome do usuário com ponto a solução do instrutor aceita

Imagino que isso não deveria ocorrer, por exemplo:

douglas.@gmail.com.br é aceito.

1 resposta
solução

Douglas, você tem razão!

Repare que na lista de emails que não podem ser reconhecidos, nenhum é semelhante ao seu exemplo. Então tecnicamente, a resposta do instrutor está correta!

Validação de email é uma das expressões mais complexas que vemos por aí, especialmente porque a cada dia vemos novos caracteres sendo permitidos em servidores novos. Porém, vamos incluir o seu caso no grupo de emails recusados e refazer a regex:

//Expressão original:
^([\w-]\.?)+@([\w-]+\.)+([A-Za-z]{2,4})+$

Quebrando em partes:

//Endereço:
([\w-]\.?)+

//Domínio:
([\w-]+\.)+([A-Za-z]{2,4})+

Como não precisamos mexer na expressão de domínio, vamos deixá-la para lá por hora.

Sobre o endereço

  1. Vemos que é um grupo que se repete 1 ou mais vezes.
  2. Isso significa que o email deve começar com [\w-] e em seguida pode ter um .
  3. Também significa que não podem haver dois pontos seguidos .., pois antes de qualquer . deve haver ao menos um caractere em [\w-].
  4. O último caractere pode ser um ., pois ele é a parte final opcional da regex.

Definição da regex

Para começar, vamos definir a regra por extenso.. Isso sempre ajuda a separar os grupos e escrever a regex por partes. Um email deve:

  1. Começar com ao menos uma letra
  2. Ser seguida por um ponto ou hifen opcional
  3. Cada ponto ou hifen deve ser seguido por ao menos uma letra ou número
  4. Os itens 2 e 3 podem se repetir quantas vezes for desejado

Solução

  1. Precisamos garantir que o email comece com uma letra. Atualmente, ele pode começar com letra, número, sublinhado ou hifen, pois o atalho \w representa o conjunto [a-zA-Z0-9_], então [\w-] soma isso ao hifen: [a-zA-Z0-9_-]. Então vamos começar com [a-zA-Z]+.
    [a-zA-Z]+
  2. Em seguida, ele deve poder ter um ponto ou hifen. Fazemos isso com o conjunto [.-]?
    [a-zA-Z]+[.-]?
  3. Depois do ponto ou hifen deve haver uma letra ou número, com o conjunto [a-zA-Z0-9]
    [a-zA-Z]+[.-]?[a-zA-Z0-9]
  4. Os passos 2 e 3 podem não existir ou se repetir indefinidamente, então vamos agrupá-los com ([.-]?[a-zA-Z0-9])*
    [a-zA-Z]+([.-]?[a-zA-Z0-9])*

Regex completa

^[a-zA-Z]+([.-]?[a-zA-Z0-9])*@([\w-]+\.)+([A-Za-z]{2,4})+$

Vamos validar? Entre na minha regex salva no regex101 e dê uma olhada!

Se precisar de qualquer explicação mais completa, pode dar uma chamada!

Um abraço e bons estudos