m5web
@m5web
Python, js

Как проверить доменную зону в строке с email?

Здравствуйте.
Помогите пожалуйста составить регулярное выражение для фильтрации доменной зоны выходящих e-mail's пользователей.

Для начала я определяю массив с допустимыми доменными зонами:
$allowedDomainZones = array(".ru", ".com", ".info", ".org", ".net"); // etc.

Затем идет проверка:
$invalidEmail = "abcd123@domain.XZ"; // e.g. define invalid string with email
$regularExpression = "^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"; 
if (preg_match($regularExpression, $invalidEmail)) {
     echo $email . " email accepted! Ok =)";
} else { 
     echo $email . " you have entered invalid email =(";
}

Вопрос: как добавить в регулярное выражение проверку доменных зон из массива $allowedDomainZones ?

Общая задача: не допускать к регистрации пользователей, указывающих доменную зону вне
$allowedDomainZones = array(".ru", ".com", ".info", ".org", ".net");
доменных зон.
Речь идет о информационном портале, который раньше работал на Dupal 6, в результате отсутствия фильтрации, бд откровенно загажена спамерскими аккаунтами, аккаунтами с логином вида: admiN, ADMIN, ♥ Лапочка МОя ♥ и прочей дребеденью в ASCII.
  • Вопрос задан
  • 2600 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
А можно полюбопытствовать общую задачу? При которой во времена New gTLDs требуется белый список доменов первого уровня?
$regularExpression = "^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-.]+(".join('|', $allowedDomainZones).")$";
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
kissarat
@kissarat
Node.js
Нельзя ожидать, что у email есть какой-то формат. Можно лишь с утверждением говорить, что это две строки, в которых нет пробела, разделены @, в правой из которых должна быть как минимум одна точка. Доменнов верхнего уровня есть сотни, а еще есть килечные адреса. Некоторые символы в имени пользователя могут быть проигнорированы тем или иным почтовым сервером, поэтому возможно на один и тот же почтовый ящик зарегистрировать несколько аккаунтов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы