Xác thực email Regex


215

Tôi dùng cái này

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

regrec để xác thực email

([\w\.\-]+)- đây là tên miền cấp một (nhiều chữ cái và số, cũng có dấu và gạch nối)

([\w\-]+)- đây là tên miền cấp hai

((\.(\w){2,3})+)- và tên miền này dành cho các tên miền cấp khác (từ 3 đến vô cực) bao gồm một điểm và 2 hoặc 3 chữ

Có gì sai với regex này?

EDIT: nó không khớp với email "Something@someth.ing"


1
Khác với bạn không bao gồm các ký tự hợp lệ, như được chỉ định bởi RFCs 5321 & 5322 - nhẹ nhàng.
Brad Christie


Tôi nghĩ bạn phải cho chúng tôi biết những gì sai và sau đó những người khác ở đây có thể giúp bạn sửa chữa những điều sai trái.
Uwe Keim

10
Bạn có một vấn đề -> bạn nghĩ rằng 'regex' -> bây giờ bạn có 2 vấn đề ;-)
Jakub Konecki

1
Chỉ cần một nhận xét về regex của bạn. Với các .amsterdam, .info mới và các tên miền khác, biểu thức chính quy phải là:@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,})+)$""
Ton Snoei

Câu trả lời:


371

TLD giống như .museum không khớp với cách này và có một vài TLD dài khác. Ngoài ra, bạn có thể xác thực các địa chỉ email bằng lớp MailAddress như Microsoft giải thích ở đây trong một ghi chú:

Thay vì sử dụng biểu thức thông thường để xác thực địa chỉ email, bạn có thể sử dụng lớp System.Net.Mail.MailAddress. Để xác định xem một địa chỉ email có hợp lệ hay không, hãy chuyển địa chỉ email đến hàm tạo của lớp MailAddress.MailAddress (String).

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

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

Điều này giúp bạn tiết kiệm rất nhiều đau đầu vì bạn không phải viết (hoặc cố gắng hiểu regex của người khác).


63
Điều này đã không bắt được dấu chấm kép ".." cũng như không gian nội tuyến ".". Thay vào đó tôi sẽ đi với regex
Benny Skogberg

33
Mặc dù đây là một câu trả lời phổ biến. Điều đó không đúng, không bắt được ít nhất hai định dạng không hợp lệ: "Abc. @ Example.com", "Abc..123 @ example.com"
sean717

12
@ sean717: Xem RFC và / hoặc liên kết . Tôi đồng ý rằng các ví dụ của bạn có thể sẽ không hoạt động trong thế giới thực, nhưng điều đó không làm cho chúng không hợp lệ.
Dan Pichelman

13
Cho dù nó đang hoạt động hay không sử dụng thử bắt để xác thực đầu vào không được khuyến khích thực hành. Regex chắc chắn là cách tốt hơn để đi.
mrt

159
-1 Đoạn mã xấu. Bắt một ngoại lệ không phải là cách để xác nhận các trường.
ken2k

99

Tôi nghĩ @"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"nên làm việc.
Bạn cần viết nó như thế nào

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

Được cảnh báo rằng điều này sẽ thất bại nếu:

  1. Có một tên miền phụ sau @biểu tượng.

  2. Bạn sử dụng TLD có chiều dài lớn hơn 3, chẳng hạn như .info


2
Trả về test@-online.com là hợp lệ. Nên không hợp lệ.
Mathias F

7
Tôi tin rằng điều này sẽ thất bại trên các TLD mới đang được ban hành, vì hiện tại bạn có thể có TLD với hơn 3 ký tự.
AaronLS

Regex này cho phép "somename@gmail.com.in.in.in.in" là hợp lệ.
Tò mò

14
gmail.com.in.in.in.in là một tên miền hoàn toàn hợp lệ, vì vậy tôi không thể hiểu tại sao nó không được phép?
larsw

Đồng ý với @larsw không nên sử dụng regex
Boris Sokolov

68

Tôi có một biểu thức để kiểm tra địa chỉ email mà tôi sử dụng.

Vì không có cái nào ở trên ngắn và chính xác như của tôi, tôi nghĩ tôi sẽ đăng nó ở đây.

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

Để biết thêm thông tin hãy đọc về nó ở đây: C # - Email Biểu hiện thường xuyên

Ngoài ra, điều này kiểm tra tính hợp lệ của RFC dựa trên cú pháp email, không phải là liệu email có thực sự tồn tại hay không. Cách duy nhất để kiểm tra xem email có thực sự tồn tại là gửi và gửi email và yêu cầu người dùng xác minh họ đã nhận được email bằng cách nhấp vào liên kết hoặc nhập mã thông báo.

Sau đó, có các tên miền vứt đi, chẳng hạn như Mailinator.com, và như vậy. Điều này không làm bất cứ điều gì để xác minh xem một email từ một miền vứt đi hay không.


Đó là người tôi đang tìm kiếm - thanx! Có cả hai dấu chấm kép ".." và khoảng trắng ".".
Benny Skogberg

5
Tôi đã cập nhật dự án biểu thức chính quy của mình để kiểm tra đơn vị và thậm chí tôi đã sửa một vài lỗi: C # - Email Biểu thức chính quy rhyous.com/2010/06/15/csharp-email-THER-expression
Rhyous

Với các TLD mới, có lẽ chúng ta nên thay thế [a-zA-Z] {2,4} trong dòng thứ ba bằng {0} và sau đó thực hiện một chuỗi.format (mẫu, pipeSeparated ALLowedTlds) trong đó pipeSeparated ALLowedTlds sẽ được tạo bởi lặp qua tập tin này: data.iana.org/TLD/tlds-alpha-by-domain.txt
Rhyous

12
Một phần Bạn có thể cho tôi biết quy tắc RFC nào bị phá vỡ bởi email của bạn không? Vì đoán gì. Theo RFC, nó hợp lệ !!!! Nếu bạn mua URL in.in, bạn có thể tạo địa chỉ email này. Hiểu biết?
Rhyous

2
Trên thực tế, có vẻ như tôi đã cập nhật điều đó trên github của mình ở đây: github.com/rhyous/EmailRegEx . Tuy nhiên, \ w có thể bao gồm các dấu gạch dưới, vì vậy tôi có thể phải chỉnh sửa nó cho chính xác.
Rhyous

36

Tôi tìm thấy tài liệu tốt đẹp trên MSDN cho nó.

Cách: Xác minh rằng các chuỗi có định dạng email hợp lệ http://msdn.microsoft.com/en-us/l Library / 01escwtf.aspx (kiểm tra xem mã này cũng hỗ trợ sử dụng các ký tự không phải ASCII cho tên miền Internet. )

Có 2 triển khai, cho .Net 2.0 / 3.0 và cho .Net 3.5 trở lên.
phiên bản 2.0 / 3.0 là:

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})(\]?)$"); 
}

Các thử nghiệm của tôi về phương pháp này đưa ra:

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
Không khớp[me]@whatever.museum
Toto

Không hợp lệ: Abc.example.com CÓ, hoạt động chính xác, tuy nhiên, "toms.email. @ Gmail.com" này; không hoạt động
Tom Stickel 18/07/13

1
Phải thêm một dấu cộng: `@" ^ ([\ w - \. +] +) @ (([[0-9] {1,3} \. [0-9] {1,3} \. [0-9] {1,3} \.) | (([\ W -] + \.) +)) ([A-zA-Z] {2,4} | [0-9] {1, 3}) (]?) $ "` 11 char còn lại trên] Google và hotmail aliassing cho phép dấu cộng trong phần đầu tiên trước khi đăng nhập @.
Henk J Meulekamp

Điều này giống như trên. cho phép "somename@gmail.com.in.in.in" làm địa chỉ email hợp lệ ... !!
Tò mò

9
@ParthTrivedi Tại sao bạn khẳng định đó somename@gmail.com.in.in.inkhông phải là địa chỉ email hợp lệ?
Ivaylo Slavov

15

Đoạn mã sau dựa trên triển khai chú thích dữ liệu của Microsoft trên github và tôi nghĩ đó là xác thực đầy đủ nhất cho email:

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
Rất vui khi nhận được điều này từ một nguồn chuyên nghiệp (tất nhiên không có gì chống lại những người khác); đánh giá cao.
Nicholas Petersen

1
Đây phải là regex tốt nhất bởi vì nó dường như xác nhận RFC 5321 và 5322. Nó bỏ lỡ một số thử nghiệm đơn vị.
ToXinE

Không chụp dấu chấm ở cuối địa chỉ email.
Sellorio

12

Điều này không đáp ứng tất cả các yêu cầu của RFC 5321 và 5322, nhưng nó hoạt động với các định nghĩa sau.

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

Dưới đây là mã

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
biểu thức này không khớp với các địa chỉ hợp lệ !#$%&'*+-/=?^_. {|} ~ @ example.com` hoặc địa chỉ nàyDörte@Sörensen.example.com
TS

7

Regex xác thực email tốt nhất

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

Và đó là cách sử dụng: -

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

Hãy thử điều này cho kích thước:

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

Hãy thử điều này, nó làm việc cho tôi:

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

Regex này hoạt động hoàn hảo:

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

Điều này ngăn chặn các email không hợp lệ được đề cập bởi những người khác trong các ý kiến:

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

Nó cũng ngăn chặn các email có dấu chấm kép:

hello..world@example..com

Hãy thử kiểm tra nó với nhiều địa chỉ email không hợp lệ như bạn có thể tìm thấy.

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

Xem địa chỉ email xác thực bằng biểu thức chính quy trong C # .


Điều này trả về false cho tất cả các địa chỉ email không hợp lệ của tôi. Thật không may, cũng trả về false cho nhiều địa chỉ email hợp lệ.
Đánh dấu

4

Tại sao không sử dụng xác thực e-mail dựa trên thuộc tính EF6?

Như bạn có thể thấy ở trên, xác thực Regex cho e-mail luôn có một số lỗ hổng trong đó. Nếu bạn đang sử dụng chú thích dữ liệu EF6, bạn có thể dễ dàng đạt được xác thực e-mail đáng tin cậy và mạnh mẽ hơn với thuộc tính chú thích dữ liệu EmailAddress có sẵn cho điều đó. Tôi đã phải xóa xác thực regex mà tôi đã sử dụng trước đây cho e-mail khi tôi gặp lỗi regex cụ thể của thiết bị di động trên trường nhập e-mail. Khi thuộc tính chú thích dữ liệu được sử dụng để xác thực e-mail, sự cố trên thiết bị di động đã được giải quyết.

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+)*");
}

Tôi sử dụng mã trên để xác nhận địa chỉ email.


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

Mặc dù mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung về lý do và / hoặc cách mã này trả lời câu hỏi cải thiện giá trị lâu dài của nó
AStopher

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

1

Phải mất nhiều nỗ lực để tạo một trình xác nhận email, đáp ứng gần như tất cả các yêu cầu trên toàn thế giới cho email.

Phương thức mở rộng bạn có thể gọi với:

myEmailString.IsValidEmailAddress();

Chuỗi mẫu Regex bạn có thể nhận được bằng cách gọi:

var myPattern = Regex.EmailPattern;

Bộ luật (chủ yếu là ý kiến):

    /// <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

Để xác thực ID email của bạn, bạn chỉ cần tạo phương thức đó và sử dụng nó.

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

Điều này sẽ trả về Đúng / Sai. (Id email hợp lệ / không hợp lệ)


1

Đây là cách tiếp cận yêu thích của tôi cho đến nay:

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

Sau đó sử dụng phần mở rộng chuỗi đã tạo như:

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

1

Chỉ cần cho tôi biết NẾU nó không hoạt động :)

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

đây là Regex của chúng tôi cho trường hợp này:

@"^([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})(\]?)$",

Có ba phần, được checcked. cái cuối cùng là cái bạn cần. thuật ngữ cụ thể {2,6} cho bạn biết độ dài tối thiểu / tối đa của TLD ở cuối. HTH


0

Hãy thử mã sau đây:

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

TÌM KIẾM TÌM KIẾM PHƯƠNG PHÁP ĐĂNG KÝ TRONG C #

Làm cách nào để xác thực Email bằng Biểu thức chính quy?

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

Sử dụng phương thức 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

Tôi nghĩ rằng dấu mũ và ký hiệu đô la của bạn là một phần của vấn đề Bạn cũng nên sửa đổi regex một chút, tôi sử dụng @ "[:] + ([\ w .-] +) @ ([\ w -.]) + ((. (\ w) {2,3}) +) "


Khi bạn sử dụng kết quả Trim (':')
ABMoharram

0

Mẫu email Regex:

^(?:[\\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

Tôi đã sử dụng Regex.IsMatch ().

Trước hết bạn cần thêm câu lệnh tiếp theo:

using System.Text.RegularExpressions;

Sau đó, phương thức này trông giống như:

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

Đó là một phương thức riêng tư vì logic của tôi nhưng bạn có thể đặt phương thức ở dạng tĩnh trong một Lớp khác, chẳng hạn như "Tiện ích" và gọi nó từ nơi bạn cần.


0

Không có biểu hiện chính quy hoàn hảo, nhưng tôi nghĩ nó khá mạnh, dựa trên nghiên cứu về RFC5322 . Và với phép nội suy chuỗi C #, tôi cũng dễ theo dõi.

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 với NUnit 2.x.


0

Tôi đã tạo một lớp FormValidationUtils để xác thực email:

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

Xác thực email bằng regex

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

Nguồn: xác thực email c #

Validation Without Regex sử dụng MailAddress.MailAddress (String) constructor lớp

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

Điều này sẽ không phù hợp me@localhost. Xin vui lòng, hãy xem các trang web này: danh sách TLD ; địa chỉ hợp lệ / không hợp lệ ; regex cho địa chỉ email RFC822
Toto
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.