使用Regex的MYSQL电子邮件验证无效

时间:2015-06-02 13:22:47

标签: php mysql

enter image description here

我只想从我的数据库中获取无效的电子邮件地址,我尝试使用以下查询,但它无法正常工作

$sql=mysql_query("SELECT * FROM mytable WHERE email!='' and email NOT REGEXP '^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$'");

无效的电子邮件是 a.bcdefg-3@abccom

2 个答案:

答案 0 :(得分:3)

看起来理查德的答案是正确的,但是,如果使用了整理,它可能无效。 因此,如果您具有区分大小写的排序规则,则可能需要小写字段。

尝试此查询:

SELECT * FROM `mytable` WHERE `email` NOT REGEXP '^[[:alnum:]._%-\+]+@[[:alnum:].-]+[.][[:alnum:]]{2,4}$';    

我更新了正则表达式以使用字符类而不是字符范围来避免较低(或较高)的大小写转换。

此外,在某些IDE中,您可能必须逃避“。”有两个反斜杠,因此我使用

[.]

而不是转义点。

我再次更新以允许子域名。 编辑允许+,感谢@Charlie Brumbaugh评论。

答案 1 :(得分:0)

试试这个:

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

为我工作。

  

此外,请不要使用 MySQL驱动程序,因为它在PHP中已弃用。