这是代码
<?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];
}
}
?>
我确信这个功能工作正确,因为我在一封电子邮件中测试了它p.s.: $电子邮件是从"POST表单",但我编辑它把它放在这里没有HTML代码,我猜是错误在分割,所以请帮忙吗?
您应该使用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");
}
参见Live Demo
我将它复制到usbwebserver进行测试。
第一个错误出现在第28行,没有关闭if语句。
if(is_email($split_emails[$x]){
应该if(is_email($split_emails[$x])){
之后我就不能继续了,因为split语句是不支持的
查看baba的示例,以获得更好的电子邮件验证
-
使用
explode()
代替split
-
不鼓励使用regex测试邮件,因为PHP提供了
filter_var()
。
$split_emails = explode( "'n",$emails );
foreach( $split_emails as $mail )
echo filter_var( $mail, FILTER_VALIDATE_EMAIL );