mysql - 在 Mysql 中验证电子邮件地址

标签 mysql sql validation view

此查询创建一个 mysql View ,该 View 在一个表中捕获错误的电子邮件地址格式。因此,如果在其中插入具有 rtrrg.com 作为电子邮件的行,它将被记录在 View 中。我的问题是,如何使 View 跟踪不止一张表。第二张 table 。

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));

最佳答案

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

SELECT * FROM `users` WHERE `email` NOT REGEXP '^[^@]+@[^@]+\.[^@]{2,}$';

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

SELECT * FROM `users`, `customers`, `clients`
         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}$";

关于mysql - 在 Mysql 中验证电子邮件地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12759596/

相关文章:

c# - 如何在运行时使用错误提供程序以及关联任何控件以进行验证

mysql - gem install mysql2 -v '0.3.18' 失败

php - mysql : last five records if having same value

mysql - 使用 UNION 显示 mysql 中两个表的两列

php - SQL - 根据另一个表中的行数删除行

mysql - 根据MySQL中不同表中某些列的值匹配两列

java - 嵌套 ConfigurationProperties 中的 Spring 属性验证

android - 数据库创建语句没有创建第二个表?

sql - 带触发器的物化 View ?

reactjs - 如何将 required 属性添加到 react js 中的字段?