我们正在开发一个具有自助服务的多租户应用程序。用户使用他们的电子邮件ID进行注册。每个注册都会根据其电子邮件ID分配给租户。租户是使用这个简单的正则表达式基于电子邮件ID的网络地址部分动态创建的。
/.*@(.*)/
例如,有user1@amazon.com电子邮件的用户注册,名为amazon.com
的租户被创建,
分配给它。当user2@amazon.com注册时,他/她将被添加到同一个租户。租户用户可以相互看到并共享文件/内容。
现在亚马逊可能会在其印度办事处为员工发送@ amazon.co.in电子邮件。 他们可能有美国前缀,即美国员工的@ us.amazon.com等,
以编程方式从多种电子邮件格式中识别单个公司是否可行/可行?如果是的话,你怎么去做呢?正则表达式示例等。
是否有商业/免费服务/图书馆?
在当前的实施中,我们为amazon.co.in和us.amazon.com创建了一个单独的租户,manually
在请求时合并用户/数据。
答案 0 :(得分:2)
我不知道任何现有的库可以满足您的需要,据我所知,使用正则表达式完全解决这个问题是不可能的,但是您可以稍微缩小一点。
电子邮件规范指出,user1 @ example格式的电子邮件是有效格式,但实际上它在开放时很少见。如果您可以针对这些情况导致错误(或创建需要手动合并的新租户),则可以将匹配限制为tld之前的所有内容:
/^.*@(.*)\.[^\.]+$/
这将涵盖以下案例:
我不确定“co.uk”和“co.in”中有多少个“co”类型的标签,但如果它是一个特定的集合,您可以选择使用以下正则表达式排除这些标签(假设“ co“和”ab“被排除在外:)
/^.*@(.+?)\.(co\.|ab\.)?[^\.]+$/
然后,第一个捕获组将从以下内容中提取“示例”:
之后,您可能需要转向程序化方法才能评估子域名,例如
然而,你会很快遇到以下问题:
如果你认为某个标签可能在几个地方匹配,它也会变得很毛茸茸: