Csharp/C#教程:C#Email Regular Expression – 符合RFC 2822指南的任何内容吗?分享


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

(0)
上一篇 2021年12月20日
下一篇 2021年12月20日

精彩推荐