2

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

示例:这是示例电子邮件的外观。

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

我需要它是这样的:

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

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

4

5 回答 5

5
$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)

kudo 的电话号码正则表达式到fatcat

于 2012-07-13T11:55:43.423 回答
1

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

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

于 2012-07-13T11:55:08.170 回答
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>
于 2020-03-07T06:42:27.923 回答
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

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

于 2012-07-13T12:20:58.383 回答
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;

输出:你好我的电子邮件(电子邮件隐藏)AND电话号码是+(电话隐藏)和+(电话隐藏),或(电话隐藏)和(电话隐藏)(电话隐藏)

于 2020-10-29T08:51:57.947 回答