@sergeyll212

Как сдеать фильтр email на php?

Всем привет.
У меня на сайте создают мультиаккаунты таким образом

pohta1995@gmail.com
pohta.1995@gmail.com

Таким образом можно создать кучу аккаунтов на одну почту
Как это пофиксить на php?
  • Вопрос задан
  • 348 просмотров
Пригласить эксперта
Ответы на вопрос 2
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Так же gmail и некоторые сервисы позволяют использовать адреса вида user+любое.слово@gmail.com и письмо дойдет до user@gmail.com

1. Делаете в БД новую колонку, называете её email_normalized
2. Нормализуете каждый email и вписываете в базу помимо оригинального email'а ещё и нормализованный вариант
3. При регистрации сверяете нормализованный email который ввёл пользователь с тем что есть в базе в колонке email_normalized

Для нормализации можно например использовать такую функцию

<?php

$emails = [
    'test@mail.com', 'te.st@mail.com', 'test+test@mail.com'
];

foreach($emails as $email) {
    echo $email.' -> '.normalize_email($email)."\n";
}

//test@mail.com -> test@mail.com
//te.st@mail.com -> test@mail.com
//test+test@mail.com -> test@mail.com

function normalize_email(string $email): string
{
    $email = mb_strtolower($email);
    $email_parts = explode('@', $email, 2);
    
    //для случаев email+чтоугодно@mail.com
    if(str_contains($email_parts[0], '+')) {
        $ex = explode('+', $email_parts[0]);
        $email_parts[0] = end($ex);
    }
    
    $email_parts[0] = preg_replace('![^a-zA-Z0-9а-яА-ЯёË]+!u', '', $email_parts[0]);

    return $email_parts[0].'@'.$email_parts[1];
}
Ответ написан
@koder_1
Битрикс программист
Вероятно, такие штуки стоит делать в ручном режиме, реализовав вывод админу похожих email, который найдя неопровержимые доказательства дублей, будет удалять дубли вручную.

Иначе можно зарезать пользователей, которые никакие не дубли, а просто используют похожий email.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы