EmailAddressAttribute验证规则

本文关键字:规则 验证 EmailAddressAttribute | 更新日期: 2023-09-27 18:17:15

我一直在使用EmailAddressAttribute(从System.ComponentModel.DataAnnotations)在我的代码,它一直工作得很好。BA和测试人员需要知道如何验证电子邮件地址的规则。我可以做头或尾的正则表达式,因为它是900个字符长,我的正则表达式技能是有限的。

谁能简单地给我解释一下这些规则?

EmailAddressAttribute验证规则

基本上,在电子邮件地址字符串中,在"@"符号之前和之后都有文本。

文本中的每个字符应符合2条规则:

  1. [a-z]|'d|[!#'$%&'*+-/='?'^_`{'|}~]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF]
  2. 一些unicode代码规则,如下所示。

第一条规则意味着文本中的字符可以是下列任意一种:

  • a - z
  • 任何数字
  • !#'$%&'*+-/='?'^_`{'|}~
  • 之一
  • unicode范围'u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF

然后用.

分隔文本

应该是这样的:

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