2009-11-05 80 views
2

我需要一个Perl兼容的正则表达式来用smtp-gated过滤我的电子邮件。我只想允许一个域名('mydomain.com')并拒绝其他所有内容。我如何以一种万无一失的方式来做到这一点? (regex_reject_mail_from)如何接受来自smtp-gated中的一个域的邮件?

我知道这个问题属于serverfault,但基本上这是一个Perl的正则表达式问题,所以我认为它适合stackoverflow更多。

编辑:

这应该与这样我就可以拒绝:

"Someone" <[email protected]> 

这不应该匹配:

"Me" <[email protected]> 

这不应该也匹配:

[email protected] 

-

+0

你的输入字符串是什么样的?请提供应该匹配的样本数据,理想情况下也不应该匹配。 – daotoad 2009-11-05 07:41:04

+2

我不明白。为什么你甚至需要一个正则表达式?只要检查字符串是否以'@ mydomain.com'结尾。或'@ mydomain.com>'。 – mpen 2009-11-05 08:46:53

+1

看一下验证电子邮件地址的指南@ regular-expressions.info http://www.regular-expressions.info/email.html – Huppie 2009-11-05 08:51:06

回答

3

我建议如下:

\b[A-Z0-9._%+-][email protected](?!mydomain\.com)[A-Z0-9.-]+\.[A-Z]{2,6}\b 

使用/ i选项,使其不区分大小写。

这将匹配@之后没有mydomain.com的大多数有效(和某些无效)电子邮件地址。请记住,电子邮件验证很难用正则表达式。

+1

它不应该是'mydomain \ .com'吗? – Amarghosh 2009-11-05 08:44:48

+0

“{2,6}”背后的理性是什么?子域名是否限制为6个字符? – Amarghosh 2009-11-05 08:48:07

+0

哎呀,谢谢你的纠正。至于6个字符,当前使用的最长的TLD是.museum - 您可以删除6个,但这不是您尝试通过正则表达式验证电子邮件地址时遇到的唯一问题。 – 2009-11-05 09:20:17

1
\b(?:"[ a-zA-Z]+")?\s*<?[a-zA-Z0-9_.]@(?!mydomain\.com)\w+(?:\.\w{2,})+>?\b 

更新:请注意,这个正则表达式是fa {9,} r从完美。查看official regex获取更多信息的电子邮件地址(向下滚动至标题为RFC 2822的< p />)。

2

如果您的正则表达式将被应用于MTA通信中的MAIL FROM行,那么您无需关心完整的“电子邮件地址”规范。 MAIL FROM lines只是'<>'中包含的电子邮件地址,因此任何测试@ mydomain.com>的正则表达式都应该可以工作。

相关问题