在php中分解用不同字符分隔的电子邮件列表

时间:2012-08-27 16:03:11

标签: php regex explode

我有一个表单,我可以获取由随机字符分隔的电子邮件列表: (有些人会使用逗号,其他人会使用分号甚至*)。像这样:

email1@example.com;email2@example.com,email3@example.com*email4@example.com

有没有办法用正则表达式来爆炸字符串?

在大多数情况下,用户会输入相同的分隔符,但我不想强迫拥有独占分隔符的用户。

4 个答案:

答案 0 :(得分:3)

这样的事情应该让你开始:

<?php
$test = preg_split ('/(;|,|\*)/', 'email1@example.com;email2@example.com,email3@example.com*email4@example.com');

var_dump($test);

Docsdemo

答案 1 :(得分:1)

您可以使用preg_split功能。

这是一个简单的示例&amp;输出:

<?php
    $str = "email1@example.com;email2@example.com,email3@example.com*email4@example.com";
    $finalString=preg_split("/[*,;]/",$str);
    var_dump($finalString);
?>

输出:

array
  0 => string 'email1@example.com' (length=18)
  1 => string 'email2@example.com' (length=18)
  2 => string 'email3@example.com' (length=18)
  3 => string 'email4@example.com' (length=18)

答案 2 :(得分:1)

要获得完整的解决方案,您可以使用preg_match_all()

$emails = preg_match_all(
    "/[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}/i",
    $emails,
    $matches
);

$matches[0]数组将包含您的所有电子邮件。

答案 3 :(得分:0)

查看 in action

(?<mail>[\w%+.-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6})