1

这是代码

<?php
function is_email($input) {
  $email_pattern = "/^([a-zA-Z0-9\-\_\.]{1,})+@+([a-zA-Z0-9\-\_\.]{1,})+\.+([a-z]{2,4})$/i";
  if(preg_match($email_pattern, $input)) return TRUE;

}
$emails = "xx@xx.com
xx@xx.com
xx@xx.com
xx@xx.com
xx@xx.com
xx@xx.com
xx@xx.com
xx@xx.com
xx@xx.com
xx@xx.com
xx@xx.com
xx@xx.com
xx@xx.com
xx@xx.com
xx@xx.com
xx@xx.com
xx@xx.com
xx@xx.com";
$split_emails = split("\n",$emails);
$split_n = count($split_emails);
for ($x=0;$x<$split_n;$x++) {
if(is_email($split_emails[$x]){
echo $split_emails[$x];
}
}
?>

我确定该功能可以正常工作,因为我在一封电子邮件中对其进行了测试 ps:$emails 来自“POST Form”,但我对其进行了编辑以将其放在这里,没有 HTML 代码,我猜是拆分中的错误,所以请帮忙?

4

3 回答 3

2

您应该使用explode而不是,split您还需要修剪空格,trim您可以使用它filter_var来验证您的电子邮件

$emails = explode("\n", $emails);
foreach ( $emails as $email ) {
    $email = trim($email);
    filter_var($email, FILTER_VALIDATE_EMAIL) and print($email . "\n");
}

观看现场演示

于 2013-03-30T13:12:44.230 回答
1

我将它复制到 usbwebserver 以进行测试。

第一个错误出现在第 28 行,您没有关闭 if 语句。

if(is_email($split_emails[$x]){

应该

if(is_email($split_emails[$x])){

除此之外,我不能去,因为拆分语句已被弃用

请参阅 baba 的示例以获得更好的电子邮件验证

于 2013-03-30T13:12:25.160 回答
0
  1. 使用explode()而不是split.

  2. Testing email using regex is discouraged as PHP provides filter_var().


$split_emails = explode( "\n",$emails );
foreach( $split_emails as $mail )
  echo filter_var( $mail, FILTER_VALIDATE_EMAIL );
于 2013-03-30T13:14:31.267 回答