정규식 이메일 검증


215

나는 이것을 사용한다

@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"

정규식 이메일 확인

([\w\.\-]+)-이것은 첫 번째 수준 도메인 (다수의 문자와 숫자, 포인트와 하이픈)을

([\w\-]+)위한 것입니다-이것은 두 번째 수준의 도메인을위한 것입니다-이것은

((\.(\w){2,3})+)점과 2 또는 3을 포함하는 다른 수준의 도메인 (3에서 무한대까지)을위한 것입니다 리터럴

이 정규식에 어떤 문제가 있습니까?

편집 : 'something@someth.ing '이메일과 일치하지 않습니다


1
RFC 5321 & 5322 --nothing에 의해 지정된 유효한 문자를 포함하지 않는 것 .
Brad Christie


나는 당신 이 우리에게 무엇이 잘못되었는지 말해야 한다고 생각 하고 여기에 다른 사람들이 당신이 잘못된 것을 고치도록 도울 수 있다고 생각 합니다 .
Uwe Keim

10
당신은 문제가 있습니다-> 당신은 '정규식'을 생각합니다-> 지금 당신은 2 가지 문제가 있습니다 ;-)
Jakub Konecki

1
정규식에 대한 의견. 이 새로운 .amsterdam, .info 및 기타 도메인에서 정규식은 다음과 같아야합니다.@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,})+)$""
Ton Snoei

답변:


372

.museum 과 같은 TLD 는 이런 방식으로 일치하지 않으며, 다른 긴 TLD도 있습니다. 또한, 당신이 사용하는 이메일 주소를 확인할 수 MailAddress 클래스를 마이크로 소프트의 설명에 여기에 메모에서 :

정규식을 사용하여 전자 메일 주소의 유효성을 검사하는 대신 System.Net.Mail.MailAddress 클래스를 사용할 수 있습니다. 전자 메일 주소가 유효한지 확인하려면 전자 메일 주소를 MailAddress.MailAddress (String) 클래스 생성자에 전달하십시오.

public bool IsValid(string emailaddress)
{
    try
    {
        MailAddress m = new MailAddress(emailaddress);

        return true;
    }
    catch (FormatException)
    {
        return false;
    }
}

이것은 정규식을 작성하거나 다른 사람의 이해를 시도 할 필요가 없기 때문에 많은 두통을 덜어줍니다.


63
이중 점 ".."또는 인라인 공백 "."을 잡지 못했습니다. 내가 대신 정규식에 갈거야
베니 Skogberg에게

33
그럼에도 불구하고 이것은 대중적인 답변입니다. "Abc. @ example.com", "Abc..123 @ example.com"
sean717

12
@ sean717 : RFC 및 / 또는 링크를 참조하십시오 . 귀하의 사례가 실제 환경에서는 작동하지 않을 수도 있지만 이것이 유효하지 않다는 데 동의합니다.
Dan Pichelman

13
작동 여부에 따라 try catch를 사용하여 입력을 확인하지 않는 것이 좋습니다. 정규식은 확실히 더 좋은 방법입니다.
mrt

159
-1 잘못된 코드 조각입니다. 예외를 잡아내는 것은 필드를 검증하는 방법이 아닙니다.
ken2k

99

나는 @"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"작동해야 한다고 생각 합니다.
당신은 그것을 작성해야합니다

string email = txtemail.Text;
Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$");
Match match = regex.Match(email);
if (match.Success)
    Response.Write(email + " is correct");
else
    Response.Write(email + " is incorrect");

다음과 같은 경우 실패 할 것입니다.

  1. @기호 뒤에 하위 도메인이 있습니다 .

  2. 길이가 3보다 큰 TLD를 사용합니다 (예 : .info


2
test@-online.com을 유효한 것으로 반환합니다. 유효하지 않아야합니다.
Mathias F

7
3 글자 이상인 TLD를 가질 수 있기 때문에 발행되는 새로운 TLD에서는 이것이 실패 할 것이라고 생각합니다.
AaronLS

이 정규식은 "somename@gmail.com.in.in.in.in"을 유효한 것으로 허용합니다.
호기심

14
gmail.com.in.in.in.in은 완벽하게 유효한 도메인 이름이므로 왜 허용되지 않아야하는지 알 수 없습니까?
larsw

@larsw에 동의하면 정규식을 사용해서는 안됩니다
Boris Sokolov

68

사용하는 이메일 주소를 확인하는 표현이 있습니다.

위의 어느 것도 내만큼 짧거나 정확하지 않았으므로 여기에 게시 할 것이라고 생각했습니다.

@"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*"
+ "@"
+ @"((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$";

자세한 내용은 여기를 참조하십시오 : C # – Email Regular Expression

또한 전자 메일이 실제로 존재하는지 여부가 아니라 전자 메일 구문을 기반으로 RFC 유효성을 검사합니다. 이메일이 실제로 존재하는지 테스트하는 유일한 방법은 링크를 클릭하거나 토큰을 입력하여 이메일을 보내고 이메일로 확인하고 이메일을 수신했는지 사용자에게 확인하는 것입니다.

그런 다음 Mailinator.com과 같은 폐기 도메인이 있습니다. 이메일이 폐기 도메인에서 온 것인지 아닌지를 확인하기 위해 아무 것도하지 않습니다.


내가 찾던 것이 고맙습니다! 이중 점 ".."과 공백 "."을 모두 사용합니다.
베니 스코그 버그

5
정규 표현식 프로젝트를 업데이트하여 단위 테스트를 수행했으며 몇 가지 버그를 수정했습니다. C # – Email Regular Expression rhyous.com/2010/06/15/csharp-email-regular-expression
Rhyous

새 TLD를 사용하면 세 번째 줄의 [a-zA-Z] {2,4}를 {0}으로 바꾸고 다음으로 pipeSeparatedAllowedTlds를 작성해야하는 string.format (pattern, pipeSeparatedAllowedTlds)을 수행해야합니다. 이 파일을 반복 : data.iana.org/TLD/tlds-alpha-by-domain.txt
Rhyous

12
Parth. 귀하의 이메일이 어떤 RFC 규칙을 위반했는지 알려 주실 수 있습니까? 무엇을 추측하기 때문입니다. RFC에 따르면 유효합니다 !!!! in.in에서 URL을 구매 한 경우이 이메일 주소를 만들 수 있습니다. 이해하다?
Rhyous

2
실제로, 내 github에서 이미 github.com/rhyous/EmailRegEx를 업데이트 한 것 같습니다 . 그러나 \ w에는 밑줄이 포함될 수 있으므로 정확성을 위해 편집해야 할 수도 있습니다.
Rhyous

36

MSDN에서 멋진 문서를 찾았습니다.

방법 : 문자열이 유효한 전자 메일 형식인지 확인 http://msdn.microsoft.com/en-us/library/01escwtf.aspx (이 코드는 인터넷 도메인 이름에 ASCII가 아닌 문자 사용을 지원하는지 확인하십시오. )

.Net 2.0 / 3.0 및 .Net 3.5 이상에 대해 2 가지 구현이 있습니다.
2.0 / 3.0 버전은 다음과 같습니다.

bool IsValidEmail(string strIn)
{
    // Return true if strIn is in valid e-mail format.
    return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"); 
}

이 방법에 대한 내 테스트는 다음을 제공합니다.

Invalid: @majjf.com
Invalid: A@b@c@example.com
Invalid: Abc.example.com
Valid: j..s@proseware.com
Valid: j.@server1.proseware.com
Invalid: js*@proseware.com
Invalid: js@proseware..com
Valid: ma...ma@jjf.co
Valid: ma.@jjf.com
Invalid: ma@@jjf.com
Invalid: ma@jjf.
Invalid: ma@jjf..com
Invalid: ma@jjf.c
Invalid: ma_@jjf
Invalid: ma_@jjf.
Valid: ma_@jjf.com
Invalid: -------
Valid: 12@hostname.com
Valid: d.j@server1.proseware.com
Valid: david.jones@proseware.com
Valid: j.s@server1.proseware.com
Invalid: j@proseware.com9
Valid: j_9@[129.126.118.1]
Valid: jones@ms1.proseware.com
Invalid: js#internal@proseware.com
Invalid: js@proseware.com9
Invalid: js@proseware.com9
Valid: m.a@hostname.co
Valid: m_a1a@hostname.com
Valid: ma.h.saraf.onemore@hostname.com.edu
Valid: ma@hostname.com
Invalid: ma@hostname.comcom
Invalid: MA@hostname.coMCom
Valid: ma12@hostname.com
Valid: ma-a.aa@hostname.com.edu
Valid: ma-a@hostname.com
Valid: ma-a@hostname.com.edu
Valid: ma-a@1hostname.com
Valid: ma.a@1hostname.com
Valid: ma@1hostname.com

1
일치하지 않습니다[me]@whatever.museum
Toto

유효하지 않은 : Abc.example.com 예, 그러나 올바르게 작동합니다. "toms.email. @ gmail.com"; 작동하지 않음
Tom Stickel

1
더하기 부호를 추가해야했습니다 :`@ "^ ([\ w-\. +] +) @ (([[0-9] {1,3} \. [0-9] {1,3} \. [0-9] {1,3} \.) | (([\ w-] + \.) +)) ([a-zA-Z] {2,4} | [0-9] {1, 3}) (]?) $ "`11 왼쪽 문자] Google 및 핫메일 별칭은 @ 기호 앞의 첫 번째 섹션에서 더하기 기호를 허용합니다.
Henk J Meulekamp

위와 동일합니다. "somename@gmail.com.in.in.in"을 유효한 이메일 주소로 허용 ... !!
호기심

9
@ParthTrivedi 왜 그렇게 주장합니까 somename@gmail.com.in.in.in 유효한 이메일 주소가 아니라고 합니까?
Ivaylo Slavov

15

다음 코드는 github 에서 Microsoft의 데이터 주석 구현을 기반으로 하며 전자 메일에 대한 가장 완벽한 유효성 검사라고 생각합니다.

public static Regex EmailValidation()
{
    const string pattern = @"^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$";
    const RegexOptions options = RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture;

    // Set explicit regex match timeout, sufficient enough for email parsing
    // Unless the global REGEX_DEFAULT_MATCH_TIMEOUT is already set
    TimeSpan matchTimeout = TimeSpan.FromSeconds(2);

    try
    {
        if (AppDomain.CurrentDomain.GetData("REGEX_DEFAULT_MATCH_TIMEOUT") == null)
        {
            return new Regex(pattern, options, matchTimeout);
        }
    }
    catch
    {
        // Fallback on error
    }

    // Legacy fallback (without explicit match timeout)
    return new Regex(pattern, options);
}

1
이것을 전문적인 출처에서 얻는 것이 좋습니다 (물론 다른 사람에 대해서는 아무것도 아닙니다). 감사합니다.
Nicholas Petersen

1
RFC 5321 및 5322의 유효성을 검사하는 것으로 보이므로 이것이 최고의 정규식이어야합니다.
ToXinE

이메일 주소 끝에 점을 찍지 않습니다.
Sellorio

12

이는 RFC 5321 및 5322의 모든 요구 사항을 충족하지는 않지만 다음 정의에서 작동합니다.

@"^([0-9a-zA-Z]([\+\-_\.][0-9a-zA-Z]+)*)+"@(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]*\.)+[a-zA-Z0-9]{2,17})$";

아래는 코드입니다

const String pattern =
   @"^([0-9a-zA-Z]" + //Start with a digit or alphabetical
   @"([\+\-_\.][0-9a-zA-Z]+)*" + // No continuous or ending +-_. chars in email
   @")+" +
   @"@(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]*\.)+[a-zA-Z0-9]{2,17})$";

var validEmails = new[] {
        "ma@hostname.com",
        "ma@hostname.comcom",
        "MA@hostname.coMCom",
        "m.a@hostname.co",
        "m_a1a@hostname.com",
        "ma-a@hostname.com",
        "ma-a@hostname.com.edu",
        "ma-a.aa@hostname.com.edu",
        "ma.h.saraf.onemore@hostname.com.edu",
        "ma12@hostname.com",
        "12@hostname.com",
};
var invalidEmails = new[] {
        "Abc.example.com",     // No `@`
        "A@b@c@example.com",   // multiple `@`
        "ma...ma@jjf.co",      // continuous multiple dots in name
        "ma@jjf.c",            // only 1 char in extension
        "ma@jjf..com",         // continuous multiple dots in domain
        "ma@@jjf.com",         // continuous multiple `@`
        "@majjf.com",          // nothing before `@`
        "ma.@jjf.com",         // nothing after `.`
        "ma_@jjf.com",         // nothing after `_`
        "ma_@jjf",             // no domain extension 
        "ma_@jjf.",            // nothing after `_` and .
        "ma@jjf.",             // nothing after `.`
    };

foreach (var str in validEmails)
{
    Console.WriteLine("{0} - {1} ", str, Regex.IsMatch(str, pattern));
}
foreach (var str in invalidEmails)
{
    Console.WriteLine("{0} - {1} ", str, Regex.IsMatch(str, pattern));
}

1
이 표현은 유효한 주소 !#$%&'*+-/=?^_. {|} ~@example.com 또는 일치하지 않습니다Dörte@Sörensen.example.com
TS

7

최고의 이메일 검증 정규식

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

그리고 사용법 :-

bool isEmail = Regex.IsMatch(emailString, @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z", RegexOptions.IgnoreCase);

6

크기에 대해 이것을보십시오 :

public static bool IsValidEmailAddress(this string s)
{
    var regex = new Regex(@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?");
    return regex.IsMatch(s);
}

5

이것을 시도하십시오, 그것은 나를 위해 일하고 있습니다 :

public bool IsValidEmailAddress(string s)
{
    if (string.IsNullOrEmpty(s))
        return false;
    else
    {
        var regex = new Regex(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
        return regex.IsMatch(s) && !s.EndsWith(".");
    }
}

5

이 정규식은 완벽하게 작동합니다.

bool IsValidEmail(string email)
{
    return Regex.IsMatch(email, @"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*@((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))\z");
}

4

이것은 주석에서 다른 사람들이 언급 한 잘못된 이메일을 방지합니다.

Abc.@example.com
Abc..123@example.com
name@hotmail
toms.email.@gmail.com
test@-online.com

또한 이중 점이있는 이메일을 방지합니다.

hello..world@example..com

찾을 수있는 한 많은 유효하지 않은 이메일 주소로 테스트 해보십시오.

using System.Text.RegularExpressions;

public static bool IsValidEmail(string email)
{
    return Regex.IsMatch(email, @"\A[a-z0-9]+([-._][a-z0-9]+)*@([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,4}\z")
        && Regex.IsMatch(email, @"^(?=.{1,64}@.{4,64}$)(?=.{6,100}$).*");
}

C #에서 정규식을 사용하여 이메일 주소 확인을 참조하십시오 .


유효하지 않은 모든 이메일 주소에 대해 false를 반환합니다. 유감스럽게도 많은 유효한 전자 메일 주소에 대해 false를 반환합니다.
Mark

4

EF6 속성 기반 전자 메일 유효성 검사를 사용하지 않는 이유는 무엇입니까?

위에서 볼 수 있듯이 전자 메일의 정규식 유효성 검사에는 항상 약간의 문제가 있습니다. EF6 데이터 주석을 사용하는 경우 EmailAddress 데이터 주석 속성을 사용하여 신뢰성 있고 강력한 이메일 유효성 검증을 쉽게 수행 할 수 있습니다 . 전자 메일 입력 필드에서 모바일 장치 별 정규식 오류가 발생했을 때 전자 메일에 사용했던 정규식 유효성 검사를 제거해야했습니다. 전자 메일 유효성 검사에 데이터 주석 특성이 사용되면 모바일 문제가 해결되었습니다.

public class LoginViewModel
{
    [EmailAddress(ErrorMessage = "The email format is not valid")]
    public string Email{ get; set; }

3
new System.ComponentModel.DataAnnotations.EmailAddressAttribute().IsValid(input)

1
public static bool ValidateEmail(string str)
{                       
     return Regex.IsMatch(str, @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
}

위 코드를 사용하여 이메일 주소를 확인합니다.


1
   public bool VailidateEntriesForAccount()
    {
       if (!(txtMailId.Text.Trim() == string.Empty))
        {
            if (!IsEmail(txtMailId.Text))
            {
                Logger.Debug("Entered invalid Email ID's");
                MessageBox.Show("Please enter valid Email Id's" );
                txtMailId.Focus();
                return false;
            }
        }
     }
   private bool IsEmail(string strEmail)
    {
        Regex validateEmail = new Regex("^[\\W]*([\\w+\\-.%]+@[\\w\\-.]+\\.[A-Za-z] {2,4}[\\W]*,{1}[\\W]*)*([\\w+\\-.%]+@[\\w\\-.]+\\.[A-Za-z]{2,4})[\\W]*$");
        return validateEmail.IsMatch(strEmail);
    }

이 코드는 질문에 대답 할 수 있지만,이 코드가 질문에 응답하는 이유 및 / 또는 방법에 대한 추가 컨텍스트를 제공하면 장기적인 가치가 향상됩니다
AStopher

1
string patternEmail = @"(?<email>\w+@\w+\.[a-z]{0,3})";
Regex regexEmail = new Regex(patternEmail);

1

전 세계적으로 거의 모든 전자 메일 요구 사항을 충족하는 전자 메일 유효성 검사기를 만들려고 여러 번 시도했습니다.

다음과 같이 전화 할 수있는 확장 방법 :

myEmailString.IsValidEmailAddress();

다음을 호출하여 얻을 수있는 정규식 패턴 문자열 :

var myPattern = Regex.EmailPattern;

강령 (주로 의견) :

    /// <summary>
    /// Validates the string is an Email Address...
    /// </summary>
    /// <param name="emailAddress"></param>
    /// <returns>bool</returns>
    public static bool IsValidEmailAddress(this string emailAddress)
    {
        var valid = true;
        var isnotblank = false;

        var email = emailAddress.Trim();
        if (email.Length > 0)
        {
            // Email Address Cannot start with period.
            // Name portion must be at least one character
            // In the Name, valid characters are:  a-z 0-9 ! # _ % & ' " = ` { } ~ - + * ? ^ | / $
            // Cannot have period immediately before @ sign.
            // Cannot have two @ symbols
            // In the domain, valid characters are: a-z 0-9 - .
            // Domain cannot start with a period or dash
            // Domain name must be 2 characters.. not more than 256 characters
            // Domain cannot end with a period or dash.
            // Domain must contain a period
            isnotblank = true;
            valid = Regex.IsMatch(email, Regex.EmailPattern, RegexOptions.IgnoreCase) &&
                !email.StartsWith("-") &&
                !email.StartsWith(".") &&
                !email.EndsWith(".") && 
                !email.Contains("..") &&
                !email.Contains(".@") &&
                !email.Contains("@.");
        }

        return (valid && isnotblank);
    }

    /// <summary>
    /// Validates the string is an Email Address or a delimited string of email addresses...
    /// </summary>
    /// <param name="emailAddress"></param>
    /// <returns>bool</returns>
    public static bool IsValidEmailAddressDelimitedList(this string emailAddress, char delimiter = ';')
    {
        var valid = true;
        var isnotblank = false;

        string[] emails = emailAddress.Split(delimiter);

        foreach (string e in emails)
        {
            var email = e.Trim();
            if (email.Length > 0 && valid) // if valid == false, no reason to continue checking
            {
                isnotblank = true;
                if (!email.IsValidEmailAddress())
                {
                    valid = false;
                }
            }
        }
        return (valid && isnotblank);
    }

    public class Regex
    {
        /// <summary>
        /// Set of Unicode Characters currently supported in the application for email, etc.
        /// </summary>
        public static readonly string UnicodeCharacters = "À-ÿ\p{L}\p{M}ÀàÂâÆæÇçÈèÉéÊêËëÎîÏïÔôŒœÙùÛûÜü«»€₣äÄöÖüÜß"; // German and French

        /// <summary>
        /// Set of Symbol Characters currently supported in the application for email, etc.
        /// Needed if a client side validator is being used.
        /// Not needed if validation is done server side.
        /// The difference is due to subtle differences in Regex engines.
        /// </summary>
        public static readonly string SymbolCharacters = @"!#%&'""=`{}~\.\-\+\*\?\^\|\/\$";

        /// <summary>
        /// Regular Expression string pattern used to match an email address.
        /// The following characters will be supported anywhere in the email address:
        /// ÀàÂâÆæÇçÈèÉéÊêËëÎîÏïÔôŒœÙùÛûÜü«»€₣äÄöÖüÜß[a - z][A - Z][0 - 9] _
        /// The following symbols will be supported in the first part of the email address(before the @ symbol):
        /// !#%&'"=`{}~.-+*?^|\/$
        /// Emails cannot start or end with periods,dashes or @.
        /// Emails cannot have two @ symbols.
        /// Emails must have an @ symbol followed later by a period.
        /// Emails cannot have a period before or after the @ symbol.
        /// </summary>
        public static readonly string EmailPattern = String.Format(
            @"^([\w{0}{2}])+@{1}[\w{0}]+([-.][\w{0}]+)*\.[\w{0}]+([-.][\w{0}]+)*$",                     //  @"^[{0}\w]+([-+.'][{0}\w]+)*@[{0}\w]+([-.][{0}\w]+)*\.[{0}\w]+([-.][{0}\w]+)*$",
            UnicodeCharacters,
            "{1}",
            SymbolCharacters
        );
    }

1

이메일 ID의 유효성을 검사하려면 해당 방법을 만들어서 사용하면됩니다.

    public static bool IsValidEmail(string email)
    {
        var r = new Regex(@"^([0-9a-zA-Z]([-\.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$");
        return !String.IsNullOrEmpty(email) && r.IsMatch(email);
    }

True / False를 반환합니다. (유효한 이메일 ID)


1

이것은 지금까지 내가 가장 좋아하는 접근법입니다.

public static class CommonExtensions
{
    public static bool IsValidEmail(this string thisEmail)
        => !string.IsNullOrWhiteSpace(thisEmail) &&
           new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$").IsMatch(thisEmail);
}

그런 다음 생성 된 문자열 확장자를 다음과 같이 사용하십시오.

if (!emailAsString.IsValidEmail()) throw new Exception("Invalid Email");

1

그냥 알려 주시기 경우 가 작동하지 않습니다 :)

public static bool isValidEmail(this string email)
{

    string[] mail = email.Split(new string[] { "@" }, StringSplitOptions.None);

    if (mail.Length != 2)
        return false;

    //check part before ...@

    if (mail[0].Length < 1)
        return false;

    System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"^[a-zA-Z0-9_\-\.]+$");
    if (!regex.IsMatch(mail[0]))
        return false;

    //check part after @...

    string[] domain = mail[1].Split(new string[] { "." }, StringSplitOptions.None);

    if (domain.Length < 2)
        return false;

    regex = new System.Text.RegularExpressions.Regex(@"^[a-zA-Z0-9_\-]+$");

    foreach (string d in domain)
    {
        if (!regex.IsMatch(d))
            return false;
    }

    //get TLD
    if (domain[domain.Length - 1].Length < 2)
        return false;

    return true;

}

1

이 경우에 대한 정규 표현식은 다음과 같습니다.

@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
                       @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
                       @".)+))([a-zA-Z]{2,6}|[0-9]{1,3})(\]?)$",

checcked 세 부분이 있습니다. 마지막 것은 아마도 당신이 필요로하는 것입니다. 특정 용어 {2,6} 은 끝에 TLD의 최소 / 최대 길이를 나타냅니다. HTH


0

다음 코드를 시도하십시오.

using System.Text.RegularExpressions;
if  (!Regex.IsMatch(txtEmail.Text, @"^[a-z,A-Z]{1,10}((-|.)\w+)*@\w+.\w{3}$"))
        MessageBox.Show("Not valid email.");

0

C #에서 정규식 방법을 사용하여 검색

정규식으로 이메일을 확인하는 방법은 무엇입니까?

string EmailPattern = @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";
if (Regex.IsMatch(Email, EmailPattern, RegexOptions.IgnoreCase))
{
    Console.WriteLine("Email: {0} is valid.", Email);
}
else
{
    Console.WriteLine("Email: {0} is not valid.", Email);
}

참조 String.Regex () 메서드 사용


0

1

^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*@((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$

2

^(([^<>()[\]\\.,;:\s@\""]+(\.[^<>()[\]\\.,;:\s@\""]+)*)|(\"".+\""))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$

0

캐럿과 달러 기호가 문제의 일부라고 생각합니다. 정규식도 약간 수정해야합니다. 다음 @ "[:] + ([\ w .-] +) @ ([\ w-.]) + ((. (\ w) {2,3}) +) "


Trim ( ':') 결과
ABMoharram

0

정규식 이메일 패턴 :

^(?:[\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`\\{\\|\\}\\~]+\\.)*[\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`\\{\\|\\}\\~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\\-](?!\\.)){0,61}[a-zA-Z0-9]?\\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\\[(?:(?:[01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\.){3}(?:[01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\]))$

0

Regex.IsMatch ()를 사용하고 있습니다.

우선 다음 문장을 추가해야합니다.

using System.Text.RegularExpressions;

그런 다음 방법은 다음과 같습니다.

private bool EmailValidation(string pEmail)
{
                 return Regex.IsMatch(pEmail,
                 @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
                 @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$",
                 RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));
}

내 논리 때문에 개인 메서드이지만 "유틸리티"와 같은 다른 레이어에서 메서드를 정적으로 넣어 원하는 곳에서 호출 할 수 있습니다.


0

완벽한 정규 표현식은 없지만 RFC5322 연구에 따르면 상당히 강력 합니다. 그리고 C # 문자열 보간으로 꽤 쉽게 따라갈 수 있다고 생각합니다.

const string atext = @"a-zA-Z\d!#\$%&'\*\+-/=\?\^_`\{\|\}~";
var localPart = $"[{atext}]+(\\.[{atext}]+)*";
var domain = $"[{atext}]+(\\.[{atext}]+)*";
Assert.That(() => EmailRegex = new Regex($"^{localPart}@{domain}$", Compiled), 
Throws.Nothing);

와 Vetted NUnit 2.x.


0

이메일을 확인하기 위해 FormValidationUtils 클래스를 만들었습니다.

public static class FormValidationUtils
{
    const string ValidEmailAddressPattern = "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$";

    public static bool IsEmailValid(string email)
    {
        var regex = new Regex(ValidEmailAddressPattern, RegexOptions.IgnoreCase);
        return regex.IsMatch(email);
    }
}

0

정규식을 사용한 이메일 검증

    string pattern = @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z";

    //check first string
   if (Regex.IsMatch(EmailId1 , pattern))
   {    
       //if email is valid
        Console.WriteLine(EmailId1+ " is a valid Email address ");
   }

출처 : 이메일 유효성 검사 C #

MailAddress.MailAddress (String) 클래스 생성자를 사용하여 정규 표현식이없는 유효성 검사

public bool IsEmailValid(string emailaddress)
{
 try
 {
    MailAddress m = new MailAddress(emailaddress);
    return true;
 }
 catch (FormatException)
 {
    return false;
 }
}

일치하지 않습니다 me@localhost. 다음 사이트를 살펴보십시오 : TLD list ; 유효 / 무효 주소 ; RFC822 이메일 주소 정규식
Toto
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.