我想让用户粘贴到一个新的行分隔联系人列表,并有一系列的名称和电子邮件生成的效率。
假设这些条目的可能性是:
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] => ...
)
有什么想法吗?
发布于 2011-10-29 11:10:58
与其使用into来拆分字符串,还不如使用regex拆分:
http://www.php.net/manual/en/function.preg-split.php
这样,您就可以在一行代码中按空格、逗号或两者分开字符串。很可能是这样的:
$array = preg_split('#[ |,]+#', $input);
然后,您可以使用filter_var()检查每个字段,查看哪个是电子邮件地址。
filter_var('bob@example.com', FILTER_VALIDATE_EMAIL);
发布于 2011-10-29 10:02:20
可以试着这样做吗?
发布于 2011-10-29 10:14:37
嗯,我想出了一个大致的想法:
substr()
,从0到该字符的位置,然后该字符的位置加上一个到末尾)。您将得到第一部分,这是所有的名称,其中可能包含一个名字,姓氏,或其他信息。第二部分是电子邮件地址。如果@符号的左边没有空格,那么您可以暗示没有指定名称。如果您真的想添加对空格字符的支持,可以始终直接查找@符号的左侧字符,如果是双引号,则继续向左搜索第二个双引号。包含空格的电子邮件地址为"contains a space"@example.com
https://stackoverflow.com/questions/7940610
复制相似问题