我希望匹配特定域中的所有电子邮件地址。
来自example.com
或foo.example.com
的任何电子邮件都应该匹配,其他所有内容都应该被拒绝。要做到这一点,我可以做一些基本的字符串匹配,以检查给定的字符串是否以example.com
结尾,或者包含fooexample.com
哪个可以正常工作,但这也意味着像`/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.example.com\b/i`
这样的东西会通过。
因此,基于上述要求,我开始研究一种可以通过域及其子域的模式。我能够提出以下正则表达式模式:
{{1}}
这只匹配了子域名,但我看到处理主域名的“How to match all email addresses at a specific domain using regex?”模式。
有没有办法将这两者合并为适用于any address from example.com的内容。
答案 0 :(得分:2)
怎么样
/\b(?:(?![_.-])(?!.*[_.-]{2})[a-z0-9_.-]+(?<![_.-]))@(?:(?!-)(?!.*--)[a-z0-9-]+(?<!-)\.)*example\.com\b/i
答案 1 :(得分:0)
这个也会匹配&#39;标记&#39;和&#39; tagged-subdomain&#39;邮件如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
希望它可以帮到你
答案 2 :(得分:0)
我建议阅读“Stop Validating Email Addresses With Your Complex Regex”。
从那时起,我会寻找:
/@.*\bexample\.com/
例如:
%w[foo@example.com foo@barexample.com foo@subdomain.example.com].grep(/@.*\bexample\.com/)
=> ["foo@example.com", "foo@subdomain.example.com"]
最终得到一个维护噩梦的正则表达式太容易了,而这并不能满足你的需求。我强烈建议保持简单。