mysql - valido - validar correo php
Validar direcciones de correo electrónico en mysql (5)
Para la validación correcta del correo electrónico, puede utilizar esta expresión regular como a continuación:
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,63}$'';
Esta consulta crea una vista mysql que captura formatos de dirección de correo electrónico incorrectos en una tabla. Por lo tanto, si se inserta una fila que tiene rtrrg.com
como correo electrónico, se registrará en la vista. Mi pregunta es, ¿cómo puedo hacer que la vista siga más de una tabla? Una segunda mesa.
El 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''.@'', `table_with_email_column`.`email`) <> 0)
or (locate(_latin1''..'', `table_with_email_column`.`email`) <> 0));
Puede usar un UNION
en la VIEW
pero luego tiene que repetir toda la declaración WHERE
que le da un código redundante. Por lo tanto, sería un VIEW
ayuda que lo convierte en UNION
y luego aplica la cláusula WHERE
.
Demo aquí: SQL Fiddle Demo .
Eso se aplicaría a su SQL de alguna manera como esto (no probado);
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''.@'', `table_with_email_column`.`email`) <> 0)
or (locate(_latin1''..'', `table_with_email_column`.`email`) <> 0));
Y sí, la consulta para verificar la dirección de correo electrónico mediante una regex
que se puede encontrar fácilmente en cualquier parte de Internet lo simplifica aún más.
Puede utilizar un SELECT
puro para validar las direcciones de correo electrónico:
SELECT * FROM `users` WHERE `email` NOT REGEXP ''^[^@]+@[^@]+/.[^@]{2,}$'';
Y ahora, para su pregunta sobre el seguimiento de varias tablas, puede usar nombres de tablas separados por comas, ¿no?
SELECT * FROM `users`, `customers`, `clients`
WHERE `email` NOT REGEXP ''^[A-Z0-9._%-]+@[A-Z0-9.-]+/.[A-Z]{2,63}$'';
Una simple instrucción SELECT
es suficiente, por ejemplo:
SELECT * FROM user 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-Z]{2,4}$''
Esta consulta maneja las direcciones de Gmail con el signo +
y las direcciones donde el host es una sola letra.
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,
63 } $’