2012-07-13 61 views
2

我一直希望得到这个小小的帮助,因为它让我有点困惑......我运行一个网站,允许用户来回发送消息,但在收件箱中我需要隐藏电子邮件和电话号码。在PHP中查找并替换电子邮件和电话号码

示例:这是示例电子邮件的样子。

嗨,我的电话是+44 5555555和电子邮件是[email protected]

我需要它是这样的:

嗨,我的手机(手机隐藏)和电子邮件是(电子邮件隐藏)

你有什么想法吗?......我真的很感激!..

回答

2
$x = 'Hi, my phone is +44 5555555 and email is [email protected]'; 
$x = preg_replace('/[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}/i','(phone hidden)',$x); // extract email 
$x = preg_replace('/(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?/','(email hidden)',$x); // extract phonenumber 
echo $x; // Hi, my phone is (phone hidden) and email is (email hidden) 

工藤的为PHONENUMBER正则表达式fatcat

+1

jack [at] jack [dot] com? – 2012-07-13 11:57:54

+0

嗨,使用该代码,它适用于电话号码,但不是电子邮件? – 2012-07-13 12:19:35

+0

忘记大小写不敏感!固定 – rsplak 2012-07-13 12:23:24

1

试图用100%的准确率要做到这一点时,用户可以输入各种东西是不可能的 - 你不能真正明确地说,如果一个子字符串是一个电话号码或只是另一个号码,或一个电子邮件地址或只是一个有效的东西。

但是,如果你想尝试,你应该使用正则表达式。见http://php.net/manual/en/function.preg-replace.php

+1

请小心使用正则表达式来匹配电子邮件;你很容易做错了。有关详细信息,请参阅此答案:http://stackoverflow.com/a/201378/643309 – WilliamMayor 2012-07-13 11:57:49

0

如果我理解正确的话,用户可以将消息发送到对方和你担心,如果他们发送消息与它的个人信息信息可能太明显。

我想你是在试图从消息的预览中删除这些信息(但是如果你打开消息,仍然可以使用它)。

如果是这种情况,那么你可以有一个非常草率的正则表达式去除任何看起来有点像数字或电子邮件的东西。如果您隐藏非个人信息并不重要,因为邮件的未审查版本始终可用。

我会去与像这样(未经):

# Take any string that contains an @ symbol and replace it with ... 
# The @ symbol must be surrounded by at least one character on both sides 
$message = preg_replace('/[^ ][email protected][^ ]+/','...',$message); # for emails 
# Take any string that contains only numbers, spaces and dashes, replace with ... 
# Can optionally have a + before it. 
$message = preg_replace('/\+?[0-9\- ]+/','...',$message); # for phone numbers 

这是要配合很多的东西,不仅仅是电子邮件和电话号码。它也可能与我没有想到的电子邮件和电话号码不匹配,这是为这些事情编写正则表达式时遇到的问题之一。

相关问题