根据 RFC2822 验证消息 ID 的正则表达式

标签 regex email rfc2822

我还没有找到一个正则表达式来做到这一点。我需要验证电子邮件中的“消息 ID:”值。它类似于电子邮件地址验证正则表达式,但更简单,没有电子邮件地址允许的大多数边缘情况,来自 rfc2822

msg-id          =       [CFWS] "<" id-left "@" id-right ">" [CFWS] 
id-left         =       dot-atom-text / no-fold-quote / obs-id-left
id-right        =       dot-atom-text / no-fold-literal / obs-id-right
no-fold-quote   =       DQUOTE *(qtext / quoted-pair) DQUOTE
no-fold-literal =       "[" *(dtext / quoted-pair) "]"

假设外部 <> 是可选的。点原子文本和缺失的定义可以在 rfc2822 中找到

我不精通正则表达式,如果存在,我更喜欢使用已经测试过的正则表达式。

最佳答案

如果有人感兴趣,我们的一位高级架构师研究了 RFC 2822 的许多层,并提出了以下正则表达式,其中包括在左侧和右侧引用。规范说新的实现不应该使用过时的字符,所以这个正则表达式不允许它们:

((([a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*)|("(([\x01-\x08\x0B\x0C\x0E-\x1F\x7F]|[\x21\x23-\x5B\x5D-\x7E])|(\\[\x01-\x09\x0B\x0C\x0E-\x7F]))*"))@(([a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*)|(\[(([\x01-\x08\x0B\x0C\x0E-\x1F\x7F]|[\x21-\x5A\x5E-\x7E])|(\\[\x01-\x09\x0B\x0C\x0E-\x7F]))*\])))

关于根据 RFC2822 验证消息 ID 的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3968500/

相关文章:

php - 有效电子邮件地址的 Swift_RfcComplianceException,适用于 Windows 而不是 Ubuntu

c# - 正则表达式匹配括号和大括号

c# - 从 C# 发送 html 电子邮件

email - 如何在 Parallels Panel 上使用 Mandrill 应用程序作为系统消息邮件?

python - 如何在 python 中为电子邮件创建消息 ID?

rust - 如何解析 RFC2822 中的日期,允许在字符串末尾使用时区?

javascript - 为每个字母添加跨度,但避免使用 javascript 的 html 标签

R - grep 删除大写行

javascript - IPV4 地址的正则表达式给出无效响应

php - 为什么我的链接没有通过 php 电子邮件功能显示出来?