идентифицировать одну компанию из нескольких форматов адресов электронной почты - PullRequest
0 голосов
/ 29 октября 2011

Мы разрабатываем мультитенантное приложение с самообслуживанием.Пользователи регистрируются, используя свои адреса электронной почты.Каждая регистрация присваивается арендатору на основании его идентификатора электронной почты.Арендаторы создаются динамически на основе части сетевого адреса идентификатора электронной почты с использованием этого простого регулярного выражения.

/.*@(.*)/

Например, если пользователь с электронной почтой user1@amazon.com подписывается, арендатор с именем amazon.com получаетсоздан и закреплен за ним.Когда user2@amazon.com зарегистрируется, он / она будет добавлен к тому же арендатору.Пользователи-арендаторы могут видеть друг друга и обмениваться файлами / контентом между собой.

Теперь возможно, что Amazon может иметь электронные адреса @ amazon.co.in для сотрудников в своем офисе в Индии.У них может быть префикс США, т. Е. @ Us.amazon.com для сотрудника из США и т. Д.,

  1. Можно ли / возможно программно идентифицировать одну компанию из нескольких форматов электронной почты ?.Если да, как ты это делаешь?Примеры регулярных выражений и т. Д.,

  2. Существуют ли какие-либо коммерческие / бесплатные службы / библиотеки?

В текущей реализации мы создаем отдельного арендатора для каждогоиз amazon.co.in и us.amazon.com и manually объединяют пользователей / данные по запросу.

1 Ответ

2 голосов
/ 29 октября 2011

Я не знаю ни одной из существующих библиотек, которые делают то, что вам нужно, и, насколько я могу судить, невозможно полностью решить эту проблему с помощью регулярных выражений, однако вы можете немного сузить круг.

В спецификации электронной почты указывается, что электронная почта в формате user1 @ example является допустимым форматом, но на практике она редко встречается в открытом доступе.Если вы согласны с возникновением ошибки (или созданием нового арендатора, который необходимо будет объединить вручную) для этих случаев, вы можете ограничить совпадения всем до tld:

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

Это будет охватыватьтакие случаи, как:

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

Я не уверен, сколько существует меток типа"co" в "co.uk" и "co.in", но если это определенный набор, вы можете при желании исключить их с помощью следующего регулярного выражения (предполагая, что "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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...