2010-03-30 138 views
2

我需要隐藏用户生成内容中的电话号码和其他联系人详细信息才能实现在线介绍服务。输入是随机分类风格的广告,因此我希望用(隐藏的电话号码)代替看起来像电话号码的任何内容(例如:3个或更多数字的字符串),也可以删除一些电子邮件的异国情调符号地址。编辑电话号码

这样做的最好方法是什么?

def redact_contact_details(s): 
    # redact phone numbers 
    ... 
    # redact e-mail addresses 
    ... 
    # redact web addresses 
    ... 
+0

哪个国家?或者你只是想匹配任何可能的电话号码? – 2010-03-30 20:36:51

+0

这很大程度上取决于用户内容的样子。例如。 '140370'可能是我的生日(我只是忘记了这些小点),还是它是一个电话号码,或者是我所取得的数字? – 2010-03-30 20:36:58

+1

多么可怕的想法。 – 2010-03-30 22:20:18

回答

2

在Python,在字符串替换s三个或更多的数字有三个点:

import re 
s = re.sub(r'\d{3,}', '...', s) 

“的e-mail地址的异国情调的符号”是我很难分析;也许你的意思是S /东西一样

s = re.sub(r'[\w.][email protected][\w.]+', '<email redacted>', s) 
+0

谢谢你,简短而又甜美,现在只是一些可以很好地隐藏sl human的人类网址的东西。饿了,但智能 – 2010-03-30 21:05:49

0

您可以创建一个简单的功能,只是替换任何字母数字字符用“”或任何你想要的其他角色。

例如:

function HideInput($input) { 
    $input = preg_replace("([a-zA-Z0-9])", "*", $input); 
    return $input; 
} 
+0

我认为问题是**在用户提交的内容中找到**那部分。每个文本都由字母数字字符组成。 – 2010-03-30 21:31:42

1

通过网址我猜你的意思的URL。您可以创建一个包含所有可能的域的数组(".ca",".com",".uk"....)。然后,您可以在包含其中一个域的任何“单词”上运行正则表达式替换。

要做替换,你可以使用亚历克马尔泰利的代码,而不是把你的替换'@'放入域的数组连接。在this网站上说明了连接功能。

如果在Perl中我会做匹配,如:

my $domainsString = join("|", @arrayOfPossibleDomains); 
$s =~ s/\w+[$domainString]\w+/......./g; 
+0

是的,正是我需要隐藏这些“网址”。 – 2010-04-14 12:07:50