Regex для сопоставления дубликатов / псевдонимов электронной почты в MySQL - PullRequest
1 голос
/ 18 апреля 2020

Я пытаюсь найти какое-то регулярное выражение, чтобы проверить, существует ли электронное письмо в базе данных. Более конкретно c здесь заключается в том, что я хочу найти сообщения электронной почты, которые являются одинаковыми, но могут быть написаны по-другому. Например, john.doe@example.com совпадает с johndode+123@example.com и j.o.h.n.d.o.e@example.com.

. Используя другой скрипт, я удаляю все точки и текст после +, так что john.doe+123@example.com становится johndoe@example.com. Как я могу использовать этот «раздетый» адрес для сопоставления его псевдонимов в базе данных MySQL?

У меня мало опыта с RegEx, и я до сих пор не использовал его вместе с SQL. В любом случае, я мог бы только придумать следующий код:

RegEx (соответствует всем +<any text> и . перед символом @

(\+.*(?=@)|\.(?=.*@))

SQL

SELECT email FROM users WHERE email REGEXP '(\+.*(?=@)|\.(?=.*@))'
//or
SELECT * from users WHERE email REGEXP_LIKE('johndoe@example.com', '(\+.*(?=@)|\.(?=.*@))')

Я получаю следующую ошибку для обоих:

# 1064 - у вас ошибка в синтаксисе SQL, проверьте руководство это соответствует вашей версии сервера MariaDB для правильного использования синтаксиса около REGEXP_LIKE('johndoe@example.com', '(\+.*(?=@)|\.(?=.*@))')

Что я пытаюсь сделать, это select email from users where email = 'johndoe@example.com' but disregard these characters (\+.*(?=@)|\.(?=.*@)
(код выполняется как подготовленный оператор)

Любые советы или рекомендации будут высоко оценены!

1 Ответ

1 голос
/ 18 апреля 2020

В MySQL, самый простой способ - разбить проблему на имя пользователя и домен:

where replace(substring_index(substring_index(email, '@', 1), '+', 1), '.', '') = substring_index('johndoe@example.com', '@', 1) and
      substring_index(email, '@', -1) = substring_index('johndoe@example.com', '@', -1) and
      email like '%@%' and
      email not like '%@%@%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...