EmailAddressAttribute验证规则
本文关键字:规则 验证 EmailAddressAttribute | 更新日期: 2023-09-27 18:17:15
我一直在使用EmailAddressAttribute(从System.ComponentModel.DataAnnotations)在我的代码,它一直工作得很好。BA和测试人员需要知道如何验证电子邮件地址的规则。我可以做头或尾的正则表达式,因为它是900个字符长,我的正则表达式技能是有限的。
谁能简单地给我解释一下这些规则?基本上,在电子邮件地址字符串中,在"@"符号之前和之后都有文本。
文本中的每个字符应符合2条规则:
-
[a-z]|'d|[!#'$%&'*+-/='?'^_`{'|}~]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF]
- 一些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);