2009-11-05 41 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>的正則表達式都應該可以工作。

相關問題