【发布时间】:2012-04-03 13:13:18
【问题描述】:
我正在尝试创建一个函数,将给定字符串中的每一个纯文本电子邮件地址都翻译成它的 htmlized 版本。
假设我有以下代码,其中htmlizeEmails 是我要查找的函数:
$str = "Send me an email to bob@example.com.";
echo htmlizeEmails($str); // Echoes "Send me an email to <a href="mailto:bob@example.com">bob@example.com</a>."
如果可能,我希望此函数使用filter_var 函数来检查电子邮件是否有效。
有人知道怎么做吗?谢谢!
编辑:
感谢您的回答,我使用了 Shocker 的正则表达式来匹配潜在的电子邮件地址,然后,仅如果 filter_var 验证它,它就会被替换。
function htmlizeEmails($text)
preg_match_all('/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6})/', $text, $potentialEmails, PREG_SET_ORDER);
$potentialEmailsCount = count($potentialEmails);
for ($i = 0; $i < $potentialEmailsCount; $i++) {
if (filter_var($potentialEmails[$i][0], FILTER_VALIDATE_EMAIL)) {
$text = str_replace($potentialEmails[$i][0], '<a href="mailto:' . $potentialEmails[$i][0] .'">' . $potentialEmails[$i][0] .'</a>', $text);
}
}
}
【问题讨论】:
-
不,我不想要自定义的正则表达式,因为它们对于解析电子邮件地址不是很可靠。最好还是让
filter_var来做吧 -
filter_var在内部使用正则表达式。 Comparing email regex -
我在我的答案中添加了一个综合的正则表达式,看看它是否适合你的需求;)
标签: php regex email preg-replace preg-match