【问题标题】:MySQL Validate Email RecordsMySQL 验证电子邮件记录
【发布时间】:2012-01-10 10:22:16
【问题描述】:

我知道您可以使用 PHP 电子邮件验证过滤器来检查数据是否为 ​​abc @ abc . ext

无论如何我可以运行 MySQL 查询来执行此操作,仅检查该样式格式。否则我将不得不制作一个分页和负载平衡限制脚本来从数据库中选择所有记录(50,000+),并且服务器在共享主机上对于我的客户端来说已经很慢了。

我只想查看仅包含有效电子邮件的列表,还可以使用like 查询检查重复或相似之处吗?

感谢任何合作。

【问题讨论】:

  • 这就是为什么我们在数据进入数据库之前验证数据=\
  • 我的客户刚刚获得了 XSS 保护以及我自己的 FILTER_VALIDATE_EMAIL。只是在寻找解决方案。我知道了,谢谢!
  • 为什么这个一次性操作需要分页?我不明白你的理由
  • @Col.Shrapnel我认为将 50,000 个字段加载到浏览器中会带来一个大窗口并使服务器崩溃并使其变慢。所以分页会减少使用 LIMIT ...
  • 在浏览器中加载 50,000 个字段有什么意义?!你打算怎么处理它们?

标签: php mysql validation email-validation


【解决方案1】:

有点像这样

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

SELECT * FROM users WHERE email NOT REGEXP '^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$';

更新。 只是一个例子,如何在Mysql中使用正则表达式。

【讨论】:

  • 是的好主意 使用 mysql 正则表达式 :) 请参阅本教程 http://www.mysqltutorial.org/mysql-regular-expression-regexp.aspx
  • @TheBlackBenzKid:这两个都是允许的电子邮件地址,我看不出你对它们有什么问题。
  • ...和虚线四边形,以及超过 2 个部分的域,以及邮箱名称中允许的其余字符...IIRC MySQL 使用 POSIX 解析器 - 对于 PCRE,我使用 ' ^[a-z0-9\._%+!$&*=^|~#%\'`?{}/\-]+@[a-z0-9\.-]+\.[az] {2,6}$'
  • 没有这样的东西。我在这里找不到讽刺的参考。但无论如何都提高了你的评论。 @Col.Shrapnel
  • @TheBlackBenzKid:没有这样的事情吗?回到2000年的生活怎么样? .museum 域于 2001 年推出,与 .travel 一起推出:en.wikipedia.org/wiki/.museum 从我的立场来看,那是 十年 前的事了。
【解决方案2】:

你可以使用这样的东西

SELECT * FROM your_table
WHERE email_col LIKE '%@%.%'

获取(相当)有效的电子邮件,不包括肯定错误的电子邮件。
但是您应该检查结果以确保您显示的内容...
不管怎样,这是一个起点……

【讨论】:

  • 加一个努力,我已将其用作上述的附加查询编译器。
  • 是的,因为除了上述之外,我还使用它进行快速验证和删除。我想我也会制作一个 PHP 页面,以确保我收到干净的电子邮件以及新的注册表单。这将是最好的方法。
【解决方案3】:

运行此 SQL 在 mysql 数据库中创建触发器,这将防止插入格式错误的电子邮件:

CREATE DEFINER=`root`@`localhost` TRIGGER `users_before_insert` BEFORE INSERT ON `users` FOR EACH ROW BEGIN
IF (NEW.`email` REGEXP '^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$')=0  THEN
        SIGNAL SQLSTATE VALUE '45000'
            SET MESSAGE_TEXT = '[table:users] - `email` incorrect format!';
    END IF;
END

【讨论】:

    【解决方案4】:

    正如其他人所提到的,您可以使用正则表达式来验证电子邮件,但准确性有限。

    -- you could, but not recommended
    SELECT * FROM users WHERE email NOT REGEXP '^[^@]+@[^@]+\.[^@]{2,}$';
    

    您可能会发现使用Real Email 之类的服务来验证电子邮件会更好,它不仅会检查电子邮件是否正确,还会检查域和帐户是否有效。

    您可以将数据导出为 csv,然后对其进行验证。更多信息请见How to validate emails in an sql database

    【讨论】:

      【解决方案5】:

      使用这个,它会检查哪里应该是'@'和'.'在电子邮件中。 这是经过测试的。

      SELECT * FROM school WHERE email 不是正则表达式 '^[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}$';

      【讨论】:

      • 不要使用这个。使用此正则表达式的误报太多。像 foo-foo123@foomail.com 这样的电子邮件会被抓到,它是一个有效的电子邮件地址。
      猜你喜欢
      • 2020-06-07
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多