Programming/Regex

[펌][C#] 정규식 전자 메일 유효성 검사

blueasa 2018. 9. 18. 17:58

[출처] https://code.i-harness.com/ko-kr/q/5184a7

 

 

 

나는 @"^([\w\.\-]+)@([\w\-]+)((\.(\w))+)$" 가 효과가 있다고 생각합니다. 
당신은 그것을 쓸 필요가 있습니다.

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

다음 경우에 실패 할 것이라고 경고하십시오.

  1. @ 기호 다음에 하위 도메인이 있습니다.
  2. .info 와 같이 길이가 3보다 큰 TLD를 사용합니다.
 Question

나는 이것을 사용한다.

@"^([\w\.\-]+)@([\w\-]+)((\.(\w))+)$"

전자 우편의 유효성을 검사하는 regexp

([\w\.\-]+) - 첫 번째 수준 도메인 (많은 문자와 숫자, 점과 하이픈) 

([\w\-]+) - 두 번째 수준 도메인 용입니다. 

((\.(\w))+) 와)과 2 또는 3 리터럴을 포함하는 다른 레벨 도메인 (3에서 무한대까지)에 대한 것 ((\.(\w))+) 

이 정규식에 무슨 문제가 있습니까?

편집 : 그것은 "something@someth.ing"이메일과 일치하지 않습니다




 

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

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

using System.Text.RegularExpressions;

그런 다음 메서드는 다음과 같습니다.

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

그것은 내 논리 때문에 개인적인 방법이지만 "유틸리티"와 같은 다른 레이어에 정적으로 메서드를 넣고 필요한 곳에서 메서드를 호출 할 수 있습니다.




 

MSDN에 좋은 문서가 있습니다.

방법 : 문자열이 유효한 전자 메일 형식인지 확인 here (이 코드는 인터넷 도메인 이름에 비 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]\.[0-9]\.[0-9]\.)|(([\w-]+\.)+))([a-zA-Z]|[0-9])(\]?)$"); 
}

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

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



 

다음 코드는 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);
}



 

C #에서 REGEX 메서드를 사용하여 STRING 검색

정규 표현식으로 전자 메일의 유효성을 검사하는 방법

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

Reference String.Regex () 메서드 사용




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



 

이 코드는 C #에서 정규식을 사용하여 전자 메일 ID의 유효성을 검사하는 데 도움이됩니다. 닷넷 .. 사용하기 쉽습니다.

if (!System.Text.RegularExpressions.Regex.IsMatch("<Email String Here>", @"^([\w\.\-]+)@([\w\-]+)((\.(\w))+)$"))
        {
            MessageBox.show("Incorrect Email Id.");
        }



 

위 응답의 조합. MailAddress를 사용하는 Microsoft의 선호하는 방법을 사용하지만 문자열의 확장으로 구현합니다.

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

그런 다음 모든 문자열을 이메일 주소로 확인하십시오.

string customerEmailAddress = "bert@potato.com";
customerEmailAddress.IsValidEmailAddress()

깨끗하고 간편한 휴대용. 누군가가 도움이되기를 바랍니다. 전자 메일의 정규식은 지저분합니다.

MattSwanson은이 주제에 대한 블로그를 갖고 있으며 정규식을 사용하지 말고 대신 '@'abd를 입력하는 것이 좋습니다. 여기에서 그의 설명을 읽으십시오 : https://mdswanson.com/blog/2013/10/14/how-not-to-validate-email-addresses.html




 

나는 당신의 캐럿과 달러 기호가 문제의 일부라고 생각한다. 정규 표현식을 약간 수정해야한다. 나는 다음 @ "[:] + ([\ w .-] +) @ ([\ w -.]) + ((. (\ w) ) +) "




 

크기에 대해 사용해보십시오.

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);
}



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

위 코드를 사용하여 전자 메일 주소의 유효성을 검사합니다.




 

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

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

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

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



 

이 기능을 사용해보십시오.

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(".");
    }
}



 

최고의 이메일 검증 정규식

[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);
 

 

반응형