我想允许用户粘贴新行分隔的联系人列表,并有效生成一系列名称和电子邮件。
让我们说条目的可能性是:
John, foo@corp.com
foo@corp.com, John
John foo@corp.com
foo@corp.com John
foo@corp.com // will have the [name] key empty
John // will not be considered if there is no email
目前我的解决方案是explode
\n
然后用逗号分解,然后猜测电子邮件和名称的位置。我承认这完全不可靠,这就是为什么我想看看其他人如何处理这个问题。
我想要的数组就像:
array(
[0] => array(
[name] => John,
[email] => foo@corp.com
)
[1] => ...
)
有什么想法吗?
答案 0 :(得分:1)
而不是使用explode来分割字符串,您可能需要考虑使用正则表达式分割:
http://www.php.net/manual/en/function.preg-split.php
这样,您可以在一行代码中按空格,逗号或两者分割字符串。可能看起来像这样:
$array = preg_split('#[ |,]+#', $input);
然后,您可以使用filter_var()检查每个字段,以查看哪个是电子邮件地址。
filter_var('bob@example.com', FILTER_VALIDATE_EMAIL);
答案 1 :(得分:0)
可以尝试这样做:
答案 2 :(得分:0)
substr()
,从0到该字符的位置,然后该字符的位置加1到结尾)。您将获得所有名称的第一部分,其中可能包含名字,姓氏或其他信息。第二部分是电子邮件地址。如果@符号左边没有空格,那么你可以暗示没有给出任何名字。如果您[真的]想要添加对空格字符的支持,您可以随时查看@符号左侧的字符,如果是双引号,则继续向左搜索第二个双引号。包含空格的电子邮件地址为"contains a space"@example.com