Q:

EmailAddressAttribute validation rules

I have been using the EmailAddressAttribute (from System.ComponentModel.DataAnnotations) in my code and it has been working great.  The BA's and Testers need to know the rules about how it validates an email address.  I can make head nor tail of the regex as it is 900 characters long and my regex skills are limited.  
Can anyone explain the rules to me in simple terms?
Thanks.

A:

Basically, in an email address string, you have texts before and after "@" sign.
Each character in texts should match 2 rules:

[a-z]|\d|[!#\$%&'*+-/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]
some unicode code rules as I listed below.

The first rule means a char in text can be one of the following:

a-z
any digit
one of !#\$%&'*+-/=\?\^_`{\|}~
in unicode range \u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF

Then texts are separated by .

It should be something like:
private static Regex _regex = new Regex(@"^
(
    (
        ([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])))\.?$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);

