Php 匹配mysql表中的重复电子邮件条目(标准格式)
我有下表,我想匹配的电子邮件。 例如,如果我发现a.b。c@gmail.com从该表中,它应该匹配abc@gmail.comPhp 匹配mysql表中的重复电子邮件条目(标准格式),php,mysql,email,Php,Mysql,Email,我有下表,我想匹配的电子邮件。 例如,如果我发现a.b。c@gmail.com从该表中,它应该匹配abc@gmail.com +--------+--------+---------+------------------+------------+-------+ | name | owner | species | email_id | birth | death | +--------+--------+---------+------------------
+--------+--------+---------+------------------+------------+-------+
| name | owner | species | email_id | birth | death |
+--------+--------+---------+------------------+------------+-------+
| Fluffy | Harold | cat | abc@gmail.com | 1993-02-04 | NULL |
| Buffy | Harold | dog | abcd@gmail.com | 1989-05-13 | NULL |
+--------+--------+---------+------------------+------------+-------+
目前,我允许电子邮件存储在表上,如*a。bc@gmail.com**
在这种情况下,如果我发现abc@gmail.com它应该匹配a。bc@gmail.com
另一个可能的邮件地址
a.bc@gmail.com
ab.c@gmail.com
abc+1@gmail.com
abc+[.....]@gmail.com
[…]-表示数字希望这会给你一个想法
$newUserEmail = "test4@example.com";
$matchEmail=preg_replace('/[^a-zA-Z0-9_@-]/s', '', $newUserEmail);
$result = $mysqli->query("SELECT * FROM your_table WHERE email_id = '$newUserEmail'");
echo "num_rows = ".$result->num_rows."\n";
$result1 = $mysqli->query("SELECT * FROM your_table WHERE email_id = '$matchEmail'");
echo "matchEmail= ".$result1->num_rows."\n";
if ($result->num_rows > 0) {
echo "Duplicate email\n";
// do something to alert user about non-unique email
} elseif($result1->matchEmail > 0){
echo "Duplicate email\n"; // regex match email found
}
else{
$result = $mysqli->query("INSERT IGNORE INTO your_table "); // make your insert query here
if ($result === false) {echo "SQL error:".$mysqli->error;}
}
您尝试过什么?使用mysql LIKE或REGEXP使用REGEXP是更好的方法,但如何匹配上述要求。因此,您希望删除数字,然后检查电子邮件匹配与否?无论如何实现,如果要删除同一个人的重复条目,请执行以下操作:xiao xiao。ef@gmail.com和ab。cdef@gmail.com可能是两个不同的人。我已经更新了我的问题,请再次查看问题。好主意,但实际上完成所有过程需要一些时间。如果我们处理MySQLpreg_replace('/[^a-zA-Z-]/s',''$newUserEmail)会更好;实际上,它去掉了所有的数字。我允许有数字的电子邮件。bc@gmail.comab。c@gmail.com这两个电子邮件id可能与不同的用户关联。。为什么不使用电子邮件确认并检查唯一的电子邮件id?请告诉我们。