Я пытаюсь найти какое-то регулярное выражение, чтобы проверить, существует ли электронное письмо в базе данных. Более конкретно 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 (\+.*(?=@)|\.(?=.*@)
(код выполняется как подготовленный оператор)
Любые советы или рекомендации будут высоко оценены!