Так же 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];
}