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



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

/.*@(.*)/

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

现在亚马逊可能有@amazon.co。给印度办公室的员工发邮件。他们可能有美国前缀,例如,美国员工的@us.amazon.com等,

  1. 是否可行/可能,通过编程从多个电子邮件格式中识别单个公司?如果是,你将如何着手去做?Regex示例等,

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

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

我不知道有任何现有的库可以做你需要的,而且据我所知,不可能完全使用正则表达式解决这个问题,但是你可以缩小一点范围。

电子邮件规范指出,格式为user1@example的电子邮件是一种有效格式,但在实践中,这种格式在公开场合相当罕见。如果您不介意在这些情况下导致错误(或者创建一个需要手动合并的新租户),那么您可以将匹配限制为所有内容,直到tld:

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

这将包括以下情况:

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

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

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

第一个捕获组将从以下内容中提取"example":

  • 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

最新更新