在PHP中查找和替换电子邮件和电话号码

时间:2012-07-13 11:51:51

标签: php email hide

我希望对此有所帮助,因为它让我有点困惑......我运行的网站允许用户来回发送消息,但在收件箱中我需要隐藏电子邮件和电话号码。

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

嗨,我的手机是+44 5555555,电子邮件是jack@jack.com

我需要它像这样:

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

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

5 个答案:

答案 0 :(得分:4)

$x = 'Hi, my phone is +44 5555555 and email is jack@jack.com';
$x = preg_replace('/[A-Z0-9._%+-]+@[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)

电话号码正则表达式为fatcat

的荣誉

答案 1 :(得分:1)

当用户可以输入所有类型的内容时,尝试以100%的准确率执行此操作是不可能的 - 您无法确切地说出子字符串是电话号码还是其他数字,电子邮件地址或只是可能是有效的。

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

答案 2 :(得分:1)

<pre>
/*
* first par is given string
* second per is replace string like ****
* return result 
*/
function email_phone_validation_replace_php($str='',$rep='*******') { 

    $str = preg_replace('/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}/i',$rep,$str); // extract email
    $str = 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+))?/',$rep,$str); // extract phonenumber
    return  $str; // banarsiamin@gmail.com
}
$str = 'Hi, my name is amin khan banarsi <br> phone is +91 9770534045 and email is banarsiamin@gmail.com';
 echo email_phone_validation_replace_php($str);
</pre>

答案 3 :(得分: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('/[^ ]+@[^ ]+/','...',$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

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

答案 4 :(得分:0)

如果要从“消息”或“聊天”中以PHP或任何其他语言隐藏电子邮件和电话号码。您需要使用正则表达式,并在w3school上了解正则表达式。

我为您提供了一个简单而完整的解决方案。

<?php       
    $regex_email = '/[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})/';
    $regex_phone = "/[0-9]{5,}|\d[ 0-9 ]{1,}\d|\sone|\stwo|\sthree|\sfour|\sfive|\ssix|\sseven|\seight|\snine|\sten/i";

    
    $str = " Hello My Email soroutlove1996@gmail.com AND Phone No. is +919992799999 and +91 9992799999, or 9 9 9 2 7 9 9 9 9 9 and Nine Nine";;
    $str = preg_replace($regex_email,'(email hidden)',$str); // extract email
    $str = preg_replace($regex_phone,'(phone hidden)',$str); // extract phone
    
    echo $str;

输出:您好,我的电子邮件(隐藏电子邮件)且电话号码为+(电话 隐藏)和+(电话隐藏),或(电话隐藏)和(电话隐藏)(电话 隐藏)