[펌][C#] 정규식 전자 메일 유효성 검사
[출처] 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");
다음 경우에 실패 할 것이라고 경고하십시오.
@
기호 다음에 하위 도메인이 있습니다..info
와 같이 길이가 3보다 큰 TLD를 사용합니다.
나는 이것을 사용한다.
@"^([\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);
'Programming > Regex' 카테고리의 다른 글
[링크][Regex] 한국어, 일본어, 한자, 영어, 숫자 정규표현식 (2) | 2022.08.09 |
---|---|
[펌] C#에서의 나라별 정규 표현식 구현 (0) | 2019.11.25 |
[링크] 정규식 체크 사이트 (0) | 2017.12.05 |
[펌] C# - 정규식을 이용한 문자 변환 (0) | 2016.04.15 |
[펌] 유저 계정을 만들 때 특수 문자 구별하는 코드 (0) | 2016.02.16 |