验证Mysql中的电子邮件地址

24 mysql sql validation view

此查询创建一个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'.@', `table_with_email_column`.`email`) <> 0) 
      or (locate(_latin1'..', `table_with_email_column`.`email`) <> 0));
Run Code Online (Sandbox Code Playgroud)

Pra*_*man 69

您可以使用pure SELECT来验证电子邮件地址:

SELECT * FROM `users` WHERE `email` NOT REGEXP '^[^@]+@[^@]+\.[^@]{2,}$';
Run Code Online (Sandbox Code Playgroud)

现在,对于跟踪多个表的问题,您可以使用逗号分隔的表名吗?

SELECT * FROM `users`, `customers`, `clients`
         WHERE `email` NOT REGEXP '^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,63}$';
Run Code Online (Sandbox Code Playgroud)

  • `'^[^@]+@[^@]+\.[^@]{2,}$'` 不好,因为电子邮件帐户名称中并非允许使用所有符号。另外 `'^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[AZ]{2,4}$'` 不正确,因为电子邮件帐户名称应该以以字母或数字结尾(不是点或_或任何其他符号)。域名也有同样的问题。 (2认同)

bod*_*di0 8

简单的SELECT声明就足够了,例如:

 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}$'
Run Code Online (Sandbox Code Playgroud)

此查询处理带有+符号的 Gmail 地址以及主机为单个字母的地址。


Sac*_*rse 7

要进行正确的电子邮件验证,您可以使用此正则表达式:

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}$';
Run Code Online (Sandbox Code Playgroud)

  • 这个正则表达式稍好一点```'[a-zA-Z0-9] [a-zA-Z0-9 ._-]*@ [a-zA-Z0-9] [a-zA-Z0-9 ._-]*\\.[a-zA-Z] {2,4} $'```因为它也允许`x @ x.com`. (5认同)