Idioma
Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O exemplo neste artigo usa uma expressão regular para verificar se uma cadeia de caracteres está em formato de email válido.
Esta expressão regular é relativamente simples em comparação com o que pode realmente ser usado como um endereço de e-mail. Usar uma expressão regular para validar um email é útil para garantir que a estrutura de um email esteja correta. No entanto, não é uma substituição para verificar se o email realmente existe.
✔️ USE uma pequena expressão regular para verificar a estrutura válida de um email.
✔️ ENVIE um email de teste para o endereço fornecido por um usuário do seu aplicativo.
❌ Não use uma expressão regular como a única maneira de validar um email.
Se você tentar criar a expressão regular perfeita para validar que a estrutura de um email está correta, a expressão se tornará tão complexa que é incrivelmente difícil depurar ou melhorar. Expressões regulares não podem validar se um email existe, mesmo se ele estiver estruturado corretamente. A melhor maneira de validar um email é enviar um email de teste para o endereço.
Warning
O uso irrestrito de System.Text.RegularExpressions com entrada não confiável pode expor aplicativos a ataques de negação de serviço. Consulte as práticas recomendadas para expressões regulares no .NET para obter diretrizes sobre como usar com segurança .NET expressões regulares com entrada não confiável.
Example
O exemplo define um IsValidEmail método, que retorna true se a cadeia de caracteres contiver um endereço de email válido e false se não o fizer, mas não tomar nenhuma outra ação.
Para verificar se o endereço de email é válido, o IsValidEmail método chama o Regex.Replace(String, String, MatchEvaluator) método com o (@)(.+)$ padrão de expressão regular para separar o nome de domínio do endereço de email. O terceiro parâmetro é um MatchEvaluator delegado que representa o método que processa e substitui o texto correspondente. O padrão de expressão regular é interpretado da seguinte maneira:
| Pattern | Description |
|---|---|
(@) |
Corresponda ao caractere @. Essa parte é o primeiro grupo de captura. |
(.+) |
Coincida uma ou mais ocorrências de qualquer caractere. Essa parte é o segundo grupo de captura. |
$ |
Encerrar a correspondência ao final da cadeia de caracteres. |
O nome de domínio, juntamente com o caractere @, é passado para o DomainMapper método. O método usa a IdnMapping classe para traduzir caracteres Unicode que estão fora do intervalo de caracteres US-ASCII para Punycode. O método também define o sinalizador invalid como True se o método IdnMapping.GetAscii detectar caracteres inválidos no nome de domínio. O método retorna o nome de domínio Punycode precedido pelo símbolo @ para o IsValidEmail método.
Dica
É recomendável que você use o padrão de expressão regular simples (@)(.+)$ para normalizar o domínio e, em seguida, retorne um valor que indica que ele passou ou falhou. No entanto, o exemplo neste artigo descreve como usar uma expressão regular ainda mais para validar o email. Independentemente de como você valida um email, você sempre deve enviar um email de teste para o endereço para garantir que ele exista.
O método IsValidEmail então chama o método Regex.IsMatch(String, String) para verificar se o endereço corresponde a um padrão de expressão regular.
O IsValidEmail método apenas determina se o formato de email é válido para um endereço de email; ele não valida se o email existe. Além disso, o IsValidEmail método não verifica se o nome de domínio de nível superior é um nome de domínio válido listado no Banco de Dados de Zona Raiz IANA, o que exigiria uma operação de pesquisa.
using System;
using System.Globalization;
using System.Text.RegularExpressions;
namespace RegexExamples
{
class RegexUtilities
{
public static bool IsValidEmail(string email)
{
if (string.IsNullOrWhiteSpace(email))
return false;
try
{
// Normalize the domain
email = Regex.Replace(email, @"(@)(.+)$", DomainMapper,
RegexOptions.None, TimeSpan.FromMilliseconds(200));
// Examines the domain part of the email and normalizes it.
string DomainMapper(Match match)
{
// Use IdnMapping class to convert Unicode domain names.
var idn = new IdnMapping();
// Pull out and process domain name (throws ArgumentException on invalid)
string domainName = idn.GetAscii(match.Groups[2].Value);
return match.Groups[1].Value + domainName;
}
}
catch (RegexMatchTimeoutException e)
{
return false;
}
catch (ArgumentException e)
{
return false;
}
try
{
return Regex.IsMatch(email,
@"^[^@\s]+@[^@\s]+\.[^@\s]+$",
RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));
}
catch (RegexMatchTimeoutException)
{
return false;
}
}
}
}
Imports System.Globalization
Imports System.Text.RegularExpressions
Public Class RegexUtilities
Public Shared Function IsValidEmail(email As String) As Boolean
If String.IsNullOrWhiteSpace(email) Then Return False
' Use IdnMapping class to convert Unicode domain names.
Try
'Examines the domain part of the email and normalizes it.
Dim DomainMapper =
Function(match As Match) As String
'Use IdnMapping class to convert Unicode domain names.
Dim idn = New IdnMapping
'Pull out and process domain name (throws ArgumentException on invalid)
Dim domainName As String = idn.GetAscii(match.Groups(2).Value)
Return match.Groups(1).Value & domainName
End Function
'Normalize the domain
email = Regex.Replace(email, "(@)(.+)$", DomainMapper,
RegexOptions.None, TimeSpan.FromMilliseconds(200))
Catch e As RegexMatchTimeoutException
Return False
Catch e As ArgumentException
Return False
End Try
Try
Return Regex.IsMatch(email,
"^[^@\s]+@[^@\s]+\.[^@\s]+$",
RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250))
Catch e As RegexMatchTimeoutException
Return False
End Try
End Function
End Class
Neste exemplo, o padrão ^[^@\s]+@[^@\s]+\.[^@\s]+$ de expressão regular é interpretado conforme mostrado na tabela a seguir. A expressão regular é compilada usando o RegexOptions.IgnoreCase sinalizador.
| Pattern | Description |
|---|---|
^ |
Comece a correspondência no início da cadeia de caracteres. |
[^@\s]+ |
Corresponda uma ou mais ocorrências de qualquer caractere que não seja o caractere @ ou o espaço em branco. |
@ |
Corresponda ao caractere @. |
[^@\s]+ |
Corresponda uma ou mais ocorrências de qualquer caractere que não seja o caractere @ ou o espaço em branco. |
\. |
Corresponda a um único caractere de ponto. |
[^@\s]+ |
Corresponder a uma ou mais ocorrências de qualquer caractere diferente do caractere @ ou de um caractere de espaço em branco. |
$ |
Encerrar a correspondência ao final da cadeia de caracteres. |
Importante
Essa expressão regular não se destina a abranger todos os aspectos de um endereço de email válido. Ele é fornecido como um exemplo para você estender conforme necessário.