C#Email Regular Expression – 符合RFC 2822指南的任何内容吗?
我意识到有大量的正则表达式电子邮件validation,但我似乎找不到符合RFC 2822
标准的电子邮件validation。
我找到的那些继续让垃圾像… @ abc.com通过。
如果其中一个问题的答案已经符合RFC 2822(但没有注释,那么请原谅),请原谅我。
不久之前,我做了一个post 。 是的,可以使用.NET正则表达式,因为它们具有称为“ 平衡组 ”的非常规function。
经常发布的Perl RFC822与电子邮件地址不完全匹配,因为它需要预处理来删除注释。 这也是一个非常古老的RFC(从1982年开始!)。
此正则表达式适用于RFC5322,这是最新的。 它还可以正确处理所有注释和折叠空白。
这是正则表达式:
^(?'localPart'((((((((?'paren'()|(?'-paren'))|([u0021-u 0027u002a-u005bu005d-u007e]|[u0001-u0008u000bu000cu 000e-u001fu007f])|([ t]+((rn)[ t]+)?|((rn)[ t]+)+)| \([u0021-u007e]|[ t]|[rn ]|[u0001-u0008u000bu000c u000e-u001fu007f]))*(?(paren)(?!)))))|([ t]+((rn)[ t ]+)?|((rn)[ t]+)+))*?(([a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)|( "(([ t]+((rn)[ t]+)?|((rn)[ t]+)+)?(([u0021u0023-u 005bu005d-u007e]|[u0001-u0008u000bu000cu000e-u001fu 007f])|\([u0021-u007e]|[ t]|[rn ]|[u0001-u0008u000 bu000cu000e-u001fu007f])))*([ t]+((rn)[ t]+)?|((rn )[ t]+)+)?"))((((((?'paren'()|(?'-paren'))|([u0021-u00 27u002a-u005bu005d-u007e]|[u0001-u0008u000bu000cu00 0e-u001fu007f])|([ t]+((rn)[ t]+)?|((rn)[ t]+)+)|\ ([u0021-u007e]|[ t]|[rn ]|[u0001-u0008u000bu000cu 000e-u001fu007f]))*(?(paren)(?!)))))|([ t]+((rn)[ t]+ )?|((rn)[ t]+)+))*?)(.(((((((?'paren'()|(?'-paren'))| ([u0021-u0027u002a-u005bu005d-u007e]|[u0001-u0008u0 00bu000cu000e-u001fu007f])|([ t]+((rn)[ t]+)?|((rn )[ t]+)+)|\([u0021-u007e]|[ t]|[rn ]|[u0001-u0008 u000bu000cu000e-u001fu007f]))*(?(paren)(?!)))))|([ t]+ ((rn)[ t]+)?|((rn)[ t]+)+))*?(([a-zA-Z0-9!#$%&'*+/=?^_ `{|}~-]+)|("(([ t]+((rn)[ t]+)?|((rn)[ t]+)+)?(([u00 21u0023-u005bu005d-u007e]|[u0001-u0008u000bu000cu00 0e-u001fu007f])|\([u0021-u007e]|[ t]|[rn ]|[u0001- u0008u000bu000cu000e-u001fu007f])))*([ t]+((rn)[ t ]+)?|((rn)[ t]+)+)?"))((((((?'paren'()|(?'-paren'))|([ u0021-u0027u002a-u005bu005d-u007e]|[u0001-u0008u000 bu000cu000e-u001fu007f])|([ t]+((rn)[ t]+)?|((rn)[ t]+)+)|\([u0021-u007e]|[ t]|[rn ]|[u0001-u0008u0 00bu000cu000e-u001fu007f]))*(?(paren)(?!)))))|([ t]+(( rn)[ t]+)?|((rn)[ t]+)+))*?))*))@(?'domain'((((((((?' paren'()|(?'-paren'))|([u0021-u0027u002a-u005bu005d- u007e]|[u0001-u0008u000bu000cu000e-u001fu007f])|([ t ]+((rn)[ t]+)?|((rn)[ t]+)+)|\([u0021-u007e]|[ t]| [rn ]|[u0001-u0008u000bu000cu000e-u001fu007f]))*(? (paren)(?!)))))|([ t]+((rn)[ t]+)?|((rn)[ t]+)+))*?( ([a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)|("(([ t]+((rn)[ t]+)?| ((rn)[ t]+)+)?(([u0021u0023-u005bu005d-u007e]|[u000 1-u0008u000bu000cu000e-u001fu007f])|\([u0021-u007e] |[ t]|[rn ]|[u0001-u0008u000bu000cu000e-u001fu007 f])))*([ t]+((rn)[ t]+)?|((rn)[ t]+)+)?"))((((((?'pa ren'()|(?'-paren'))|([u0021-u0027u002a-u005bu005d-u0 07e]|[u0001-u0008u000bu000cu000e-u001fu007f])|([ t]+ ((rn)[ t]+)?|((rn)[ t]+)+)|\([u0021-u007e]|[ t]|[ rn ]|[u0001-u0008u000bu000cu000e-u001fu007f]))*(?(p aren)(?!)))))|([ t]+((rn)[ t]+)?|((rn)[ t]+)+))*?)( .(((((((?'paren'()|(?'-paren'))|([u0021-u0027u002a-u0 05bu005d-u007e]|[u0001-u0008u000bu000cu000e-u001fu0 07f])|([ t]+((rn)[ t]+)?|((rn)[ t]+)+)|\([u0021-u0 07e]|[ t]|[rn ]|[u0001-u0008u000bu000cu000e-u001f u007f]))*(?(paren)(?!)))))|([ t]+((rn)[ t]+)?|((rn)[ t]+)+))*?(([a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)|("(([ t]+((r n)[ t]+)?|((rn)[ t]+)+)?(([u0021u0023-u005bu005d-u0 07e]|[u0001-u0008u000bu000cu000e-u001fu007f])|\([u0 021-u007e]|[ t]|[rn ]|[u0001-u0008u000bu000cu000e- u001fu007f])))*([ t]+((rn)[ t]+)?|((rn)[ t]+)+)?")) ((((((?'paren'()|(?'-paren'))|([u0021-u0027u002a-u005 bu005d-u007e]|[u0001-u0008u000bu000cu000e-u001fu007 f])|([ t]+((rn)[ t]+)?|((rn)[ t]+)+)|\([u0021-u007 e]|[ t]|[rn ]|[u0001-u0008u000bu000cu000e-u001fu0 07f]))*(?(paren)(?!)))))|([ t]+((rn)[ t]+)?|((rn)[ t ]+)+))*?))*)|(((((((?'paren'()|(?'-paren'))|([u0021-u00 27u002a-u005bu005d-u007e]|[u0001-u0008u000bu000cu00 0e-u001fu007f])|([ t]+((rn)[ t]+)?|((rn)[ t]+)+)|\ ([u0021-u007e]|[ t]|[rn ]|[u0001-u0008u000bu000cu 000e-u001fu007f]))*(?(paren)(?!)))))|([ t]+((rn)[ t]+ )?|((rn)[ t]+)+))*?[(([ t]+((rn)[ t]+)?|((rn)[ t] +)+)?([!-Z^-~]|[u0001-u0008u000bu000cu000e-u001fu007f ]))*([ t]+((rn)[ t]+)?|((rn)[ t]+)+)?]((((((?'paren '()|(?'-paren'))|([u0021-u0027u002a-u005bu005d-u007e ]|[u0001-u0008u000bu000cu000e-u001fu007f])|([ t]+(( rn)[ t]+)?|((rn)[ t]+)+)|\([u0021-u007e]|[ t]|[rn ]|[u0001-u0008u000bu000cu000e-u001fu007f]))*(?(pare n)(?!)))))|([ t]+((rn)[ t]+)?|((rn)[ t]+)+))*?))z
但是有些警告。 RFC5322的域名比实际域RFC更自由,并且还有其他限制适用于各种RFC,例如实际的SMTP RFC本身(指定最大长度)。 因此,即使根据5322电子邮件是正确的,它也可以通过各种其他措施无效。
黄金测试仍然是使用validation码向该地址发送电子邮件。
这适用于RFC822 ,而不适用于较新的RFC822 。 但似乎地址格式没有改变 ,所以应该是你正在寻找的。
(注意正则表达式下面的注释 – 它仍假定地址已被预处理)
这在PCRE中运行: http : //code.iamcal.com/php/rfc822/full_regexp.txt
显然是32k。
说真的 – 可以考虑使用单个正则表达式退出,或者接受所有可能的电子邮件表单。
我会看一下: http : //www.regular-expressions.info/email.html ,它解释了很多关于使用正则表达式来匹配电子邮件地址的内容,并且包含了一个完整的RFC 2822表达式,老实说,我几乎从不推荐使用它。
上述就是C#学习教程:C#Email Regular Expression – 符合RFC 2822指南的任何内容吗?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/984601.html