다음을 통해 공유


방법: 문자열이 올바른 전자 메일 형식인지 확인

다음 예제에서는 문자열이 올바른 전자 메일 형식인지 확인합니다.

예제

이 예제에서는 문자열에 올바른 전자 메일 주소가 포함되어 있으면 true를 반환하고, 그렇지 않으면 false를 반환하지만 다른 작업을 수행하지 않는 IsValidEmail 메서드를 정의합니다. 전자 메일 주소가 올바른지 확인하기 위해 이 메서드는 Regex.IsMatch(String, String) 메서드를 호출하여 해당 주소가 정규식 패턴을 따르는지 확인합니다. 응용 프로그램이 데이터베이스에 주소를 저장하거나 ASP.NET 페이지에 표시하기 전에 IsValidEmail을 사용하여 유효하지 않은 문자가 들어 있는 전자 메일을 걸러낼 수 있습니다.

IsValidEmail 메서드는 전자 메일 주소가 올바른지 확인하기 위해 인증을 수행하는 것이 아니라 단지 형식이 전자 메일 주소에 적합한지 여부만 확인합니다.

Imports System.Text.RegularExpressions

Module RegexUtilities
   Function IsValidEmail(strIn As String) As Boolean
       ' Return true if strIn is in valid e-mail format.
       Return Regex.IsMatch(strIn, _
              "^(?("")("".+?""@)|(([0-9a-zA-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-zA-Z])@))" + _
              "(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,6}))$")
   End Function
End Module
using System;
using System.Text.RegularExpressions;

public class RegexUtilities
{
   public static bool IsValidEmail(string strIn)
   {
       // Return true if strIn is in valid e-mail format.
       return Regex.IsMatch(strIn, 
              @"^(?("")("".+?""@)|(([0-9a-zA-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-zA-Z])@))" + 
              @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,6}))$"); 
   }
}

이 예제에서 정규식 패턴 ^(?("")("".+?""@)|(([0-9a-zA-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-zA-Z])@))(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,6}))$는 다음 표와 같이 해석할 수 있습니다.

패턴

설명

^

문자열의 시작 부분에서 일치 항목 찾기를 시작합니다.

(?("")

첫 번째 문자가 따옴표인지 확인합니다. (?("")는 대체 구문의 시작 부분입니다.

((?("")("".+?""@)

첫 번째 문자가 따옴표이면 하나 이상의 문자와 끝 따옴표 앞에 있는 시작 따옴표를 찾습니다. 문자열은 @ 기호로 끝나야 합니다.

|(([0-9a-zA-Z]

첫 번째 문자가 따옴표가 아니면 a부터 z까지의 영문자 또는 0부터 9까지의 숫자를 찾습니다.

(\.(?! \.))

다음 문자가 마침표이면 일치하게 됩니다. 마침표가 아니면 왼쪽에서 오른쪽으로 다음 문자를 검색하여 일치 항목을 계속 찾습니다. (?!\.)는 전자 메일 주소의 로컬 부분에 마침표 두 개가 연속으로 나타나지 않도록 하며 너비가 0인 음성 lookahead 어설션입니다.

|[-!#\$%&'\*\+/=\? \^`\{\}\|~\w]

다음 문자가 마침표가 아니면 단어 문자 또는 -!#$%'*+=?^`{}|~ 중 하나를 찾습니다.

((\.(?! \.))|[-!#\$%'\*\+/=\? \^`\{\}\|~\w])*

교체 패턴(마침표가 아닌 문자 또는 여러 문자 중 하나 앞에 마침표가 있는 패턴)을 0번 이상 찾습니다.

@

@ 문자를 찾습니다.

(?<=[0-9a-zA-Z])

@ 문자 앞의 문자가 영문자(A-Z, a-z) 또는 숫자(0-9)인 경우 일치 항목 찾기를 계속합니다. (?<=[0-9a-zA-Z]) 구문은 너비가 0인 긍정 lookbehind 어설션을 정의합니다.

(?(\[)

@ 뒤의 문자가 여는 대괄호인지 확인합니다.

(\[(\d{1,3}\.){3}\d{1,3}\])

여는 대괄호이면 IP 주소(1자리에서 3자리까지의 숫자로 이루어진 4개의 집합이며 각 집합은 마침표로 구분됨)와 닫는 대괄호 앞에 있는 여는 대괄호를 찾습니다.

|(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,6})

@ 뒤의 문자가 여는 대괄호가 아니면 영숫자(A-Z, a-z 또는 0-9) 1개, 단어 문자 또는 하이픈 0개 이상, 영숫자(A-Z, a-z 또는 0-9) 1개와 마침표 1개로 구성된 패턴과 일치하는 항목을 찾습니다. 이 패턴은 한 번 이상 반복될 수 있으며 2개에서 6개까지의 영문자(a-z, A-Z)가 이 패턴 뒤에 있어야 합니다. 정규식에서 이 부분은 도메인 이름을 캡처하도록 되어 있습니다.

코드 컴파일

IsValidEmail 메서드는 정규식 유틸리티 메서드의 라이브러리에 포함되거나 응용 프로그램에 전용 정적 또는 인스턴스 메서드로 포함될 수 있습니다. 이 메서드는 정규식 라이브러리에서 정적 메서드로 사용될 경우 다음과 같은 코드를 사용하여 호출할 수 있습니다.

Public Class Application
   Public Shared Sub Main()
      Dim emailAddresses() As String = { "david.jones@proseware.com", "d.j@server1.proseware.com", _
                                         "jones@ms1.proseware.com", "j.@server1.proseware.com", _
                                         "j@proseware.com9", "js#internal@proseware.com", _
                                         "j_9@[129.126.118.1]", "j..s@proseware.com", _
                                         "js*@proseware.com", "js@proseware..com", _
                                         "js@proseware.com9", "j.s@server1.proseware.com" }

      For Each emailAddress As String In emailAddresses
         If RegexUtilities.IsValidEmail(emailAddress) Then
            Console.WriteLine("Valid: {0}", emailAddress)
         Else
            Console.WriteLine("Invalid: {0}", emailAddress)
         End If      
      Next                                            
   End Sub
End Class
' The example displays the following output:
'       Valid: david.jones@proseware.com
'       Valid: d.j@server1.proseware.com
'       Valid: jones@ms1.proseware.com
'       Invalid: j.@server1.proseware.com
'       Invalid: j@proseware.com9
'       Valid: js#internal@proseware.com
'       Valid: j_9@[129.126.118.1]
'       Invalid: j..s@proseware.com
'       Invalid: js*@proseware.com
'       Invalid: js@proseware..com
'       Invalid: js@proseware.com9
'       Valid: j.s@server1.proseware.com
public class Application
{
   public static void Main()
   {
      string[] emailAddresses = { "david.jones@proseware.com", "d.j@server1.proseware.com", 
                                  "jones@ms1.proseware.com", "j.@server1.proseware.com", 
                                  "j@proseware.com9", "js#internal@proseware.com", 
                                  "j_9@[129.126.118.1]", "j..s@proseware.com", 
                                  "js*@proseware.com", "js@proseware..com", 
                                  "js@proseware.com9", "j.s@server1.proseware.com" };
      foreach (string emailAddress in emailAddresses)
      {
         if (RegexUtilities.IsValidEmail(emailAddress))
            Console.WriteLine("Valid: {0}", emailAddress);
         else
            Console.WriteLine("Invalid: {0}", emailAddress);
      }                                            
   }
}
// The example displays the following output:
//       Valid: david.jones@proseware.com
//       Valid: d.j@server1.proseware.com
//       Valid: jones@ms1.proseware.com
//       Invalid: j.@server1.proseware.com
//       Invalid: j@proseware.com9
//       Valid: js#internal@proseware.com
//       Valid: j_9@[129.126.118.1]
//       Invalid: j..s@proseware.com
//       Invalid: js*@proseware.com
//       Invalid: js@proseware..com
//       Invalid: js@proseware.com9
//       Valid: j.s@server1.proseware.com

참고 항목

개념

.NET Framework 정규식