PHP - 电子邮件验证失败

时间:2015-04-09 16:26:31

标签: php json validation email

从多行文本字段中,我得到几个用新行分隔的电子邮件地址。字段值作为JSON字符串存储在数据库中:

{"admin_emails":"email1@domain.com\r\nemail2@domain.com"}

然后我使用json_decodeexplode解析电子邮件:

$emailStr = json_decode($stringFromDb)->admin_emails; 
$emails = explode("\r\n", str_replace("\r", "\r\n", $emailStr) ); 

接下来,对于表格中的每封电子邮件,我会检查它是否有效并做一些事情:

foreach( $emails as $email )
{
    if( filter_var($email, FILTER_VALIDATE_EMAIL) ){
        // do stuff with email
    }
}

但我遇到以下问题:filter_val只将第一封电子邮件识别为有效的电子邮件地址。所有后续电子邮件都会被过滤掉。是什么原因导致这些电子邮件无法识别为有效的电子邮件地址?

2 个答案:

答案 0 :(得分:0)

您似乎正在用"email1@domain.com\r\nemail2@domain.com"替换"email1@domain.com\r\r\nemail2@domain.com" - 换句话说\r\r\n。所以所有电子邮件在第一次开始后都有换行符,因此无效。

你可以在没有str_replace()所有人的情况下完成

答案 1 :(得分:0)

Maximus是正确的:

<?php

$s ='{"admin_emails":"email1@domain.com\r\nemail2@domain.com"}';

//Then I decode the emails using json_decode and explode:

$emailStr = json_decode($s)->admin_emails;
$emails = explode("\r\n", $emailStr);

//next, for each email in table, I check if it's valid and do some stuff:

foreach( $emails as $email ) {
    if( filter_var($email, FILTER_VALIDATE_EMAIL) ){
       echo $email." is valid\n\n";
        // do stuff with email
    }
}

这会产生:

email1@domain.com有效

email2@domain.com有效