Проверка адресов электронной почты в Mysql
Этот запрос создает представление mysql, которое фиксирует неправильные форматы адресов электронной почты в одной таблице. Поэтому, если строка вставлена в rtrrg.com
в качестве электронной почты, она будет записана в виде. Мой вопрос: как сделать дорожку просмотра более чем одной таблицей. Вторая таблица.
SQL
CREATE VIEW `invalid_emails` AS
select `table_with_email_column`.`email` AS `invalidemail`
from `table_with_email_column`
where ((locate(_latin1'', ltrim(rtrim(`table_with_email_column`.`email`))) <> 0)
or (left(ltrim(`table_with_email_column`.`email`), 1) = _latin1'@')
or (right(rtrim(`table_with_email_column`.`email`), 1) = _latin1'.')
or ((locate(_latin1'.', `table_with_email_column`.`email`,locate(_latin1'@', `table_with_email_column`.`email`)) - locate(_latin1'@', `table_with_email_column`.`email`)) <= 1)
or ((length(ltrim(rtrim(`table_with_email_column`.`email`))) - length(replace(ltrim(rtrim(`table_with_email_column`.`email`)), _latin1'@', _latin1''))) <> 1)
or (locate(_latin1'.', reverse(ltrim(rtrim(`table_with_email_column`.`email`)))) < 3)
or (locate(_latin1'[email protected]', `table_with_email_column`.`email`) <> 0)
or (locate(_latin1'..', `table_with_email_column`.`email`) <> 0));
Ответы
Ответ 1
Вы можете использовать чистый SELECT
для проверки адресов электронной почты:
SELECT * FROM `users` WHERE `email` NOT REGEXP '^[^@][email protected][^@]+\.[^@]{2,}$';
И теперь для вашего вопроса о отслеживании нескольких таблиц вы можете использовать имена разделенных таблиц правильно?
SELECT * FROM `users`, `customers`, `clients`
WHERE `email` NOT REGEXP '^[A-Z0-9._%-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$';
Ответ 2
Для правильной проверки электронной почты вы можете использовать это регулярное выражение, как показано ниже:
SELECT
*
FROM
`school`
WHERE
`email` NOT REGEXP '^[a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9._-]@[a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9]\\.[a-zA-Z]{2,4}$';
Ответ 3
Вы можете использовать UNION
в VIEW
, но затем вам нужно повторить все инструкции WHERE
, которые дают вам избыточный код. Таким образом, вы создадите хелпер VIEW
, который сделает вас UNION
, а затем примените предложение WHERE
.
Демо здесь: SQL Fiddle Demo.
Это применимо к вашему SQL как-то вроде этого (untested);
CREATE VIEW `invalid_emails_helper` AS
select `table_with_email_column`.`email` AS `invalidemail`
from `table_with_email_column`
union
select `table_with_email_column`.`email`
from `second_table_with_email_column`
CREATE VIEW `invalid_emails` AS
select `invalidemail` as `email`
from `invalid_emails_helper` as `table_with_email_column`
where ((locate(_latin1'', ltrim(rtrim(`table_with_email_column`.`email`))) <> 0)
or (left(ltrim(`table_with_email_column`.`email`), 1) = _latin1'@')
or (right(rtrim(`table_with_email_column`.`email`), 1) = _latin1'.')
or ((locate(_latin1'.', `table_with_email_column`.`email`,locate(_latin1'@', `table_with_email_column`.`email`)) - locate(_latin1'@', `table_with_email_column`.`email`)) <= 1)
or ((length(ltrim(rtrim(`table_with_email_column`.`email`))) - length(replace(ltrim(rtrim(`table_with_email_column`.`email`)), _latin1'@', _latin1''))) <> 1)
or (locate(_latin1'.', reverse(ltrim(rtrim(`table_with_email_column`.`email`)))) < 3)
or (locate(_latin1'[email protected]', `table_with_email_column`.`email`) <> 0)
or (locate(_latin1'..', `table_with_email_column`.`email`) <> 0));
И да, запрос для проверки адреса электронной почты с помощью regex
, который легко найти повсюду в Интернете, упрощает его далее.
Ответ 4
SELECT
*
FROM
users
WHERE
email NOT REGEXP ‘ ^[ a - zA - Z0 - 9 ][ a - zA - Z0 - 9._ -]*[ a - zA - Z0 - 9 ]@[ a - zA - Z0 - 9 ][ a - zA - Z0 - 9._ -]*[ a - zA - Z0 - 9 ]\.[ a - zA - Z ]{ 2,
4 } $’