0

我希望匹配来自特定域的所有电子邮件地址。

任何来自example.comfoo.example.com应该匹配的电子邮件都应该被拒绝。为此,我可以做一些基本的字符串匹配来检查给定的字符串是否以或包含结尾,example.com这会很好,但这也意味着类似的东西fooexample.com会通过。

因此,基于上述要求,我开始研究一种可以传递域及其子域的模式。我能够想出以下正则表达式模式:

`/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.example.com\b/i`

这仅匹配子域,但我在“如何使用正则表达式匹配特定域中的所有电子邮件地址? ”中看到了处理主域的模式。

有没有办法将这两者结合成适用于 example.com 中任何地址的东西。

4

3 回答 3

2

怎么样

/\b(?:(?![_.-])(?!.*[_.-]{2})[a-z0-9_.-]+(?<![_.-]))@(?:(?!-)(?!.*--)[a-z0-9-]+(?<!-)\.)*example\.com\b/i
于 2012-09-13T23:07:29.607 回答
0

这也将匹配 'tagged' 和 'tagged-subdomain' 邮件,如 a+b@example.com 和 a+b@i.example.com

(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@(?:(?!-)(?!.*--)[a-z0-9-]+(?<!-)\.)*example\.com\b

希望对你有帮助

于 2012-09-14T00:00:19.327 回答
0

我建议阅读“停止使用复杂的正则表达式验证电子邮件地址”。

从那时起,我会寻找:

/@.*\bexample\.com/

例如:

%w[foo@example.com foo@barexample.com foo@subdomain.example.com].grep(/@.*\bexample\.com/)
=> ["foo@example.com", "foo@subdomain.example.com"]

很容易得到一个维护噩梦的正则表达式,并且不能满足您的需要。我强烈建议保持简单。

于 2012-09-14T01:53:46.173 回答