单个公司从多种电子邮件地址格式中识别

时间:2011-10-28 21:59:10

标签: ruby-on-rails multi-tenant

我们正在开发一个具有自助服务的多租户应用程序。用户使用他们的电子邮件ID进行注册。每个注册都会根据其电子邮件ID分配给租户。租户是使用这个简单的正则表达式基于电子邮件ID的网络地址部分动态创建的。

/.*@(.*)/

例如,有user1@amazon.com电子邮件的用户注册,名为amazon.com的租户被创建, 分配给它。当user2@amazon.com注册时,他/她将被添加到同一个租户。租户用户可以相互看到并共享文件/内容。

现在亚马逊可能会在其印度办事处为员工发送@ amazon.co.in电子邮件。 他们可能有美国前缀,即美国员工的@ us.amazon.com等,

  1. 以编程方式从多种电子邮件格式中识别单个公司是否可行/可行?如果是的话,你怎么去做呢?正则表达式示例等。

  2. 是否有商业/免费服务/图书馆?

  3. 在当前的实施中,我们为amazon.co.in和us.amazon.com创建了一个单独的租户,manually在请求时合并用户/数据。

1 个答案:

答案 0 :(得分:2)

我不知道任何现有的库可以满足您的需要,据我所知,使用正则表达式完全解决这个问题是不可能的,但是您可以稍微缩小一点。

电子邮件规范指出,user1 @ example格式的电子邮件是有效格式,但实际上它在开放时很少见。如果您可以针对这些情况导致错误(或创建需要手动合并的新租户),则可以将匹配限制为tld之前的所有内容:

/^.*@(.*)\.[^\.]+$/

这将涵盖以下案例:

  • user1@example.com
  • user2@example.org

我不确定“co.uk”和“co.in”中有多少个“co”类型的标签,但如果它是一个特定的集合,您可以选择使用以下正则表达式排除这些标签(假设“ co“和”ab“被排除在外:)

/^.*@(.+?)\.(co\.|ab\.)?[^\.]+$/

然后,第一个捕获组将从以下内容中提取“示例”:

  • user1@example.com
  • user2@example.org
  • user3@example.co.uk
  • user4@example.ab.in

之后,您可能需要转向程序化方法才能评估子域名,例如

  • user4@for.example.com

然而,你会很快遇到以下问题:

  • user4@for.example.com
  • user6@for.example.co.uk
  • user6@forexample.com
  • user5@for.instance.com

如果你认为某个标签可能在几个地方匹配,它也会变得很毛茸茸:

  • user6@ab.example.com
  • user7@instance.ab.cd