-1

我有一个网站,我需要阻止用户通过邮件向其他用户发送联系电话/电子邮件,

我在下面有点成功地使用它,但它并没有做我想做的事情,即..匹配所有场景

public function clean_email($text){
    $pattern = '/\w+[\w-\.]*(\@\w+((-\w+)|(\w*))\.[a-z]{2,3})/i';
    preg_match($pattern, $text, $matches);
    return (isset($matches[1])) ? str_replace($matches[1], 
            "[********]", $text) : $text;
}

public function clean_phone($text){
    $pattern = '/(\d{3}|\d{4})|(\d{3,+})/i';
    preg_match($pattern, $text, $matches);
    return (isset($matches[1])) ? str_replace($matches[1], 
               "[********]", $text) : $text;
}

我正在考虑使用 preg_replace 来识别邮件文本中的电话号码,但是我知道电话号码可以用多种方式编写,如下所示,

0433 765 888
0433765888
+61433765888
+610433765888
+61 02 9876 0987
+61 0298760987
+610298760987

是否可以编写一个单一的 preg_replace 模式来识别它们?

还需要对电子邮件地址做同样的事情,我也想在我们在电子邮件文本中找到的每个电子邮件地址中用 [censored] 替换它们。IE

mlanXXX@hotmail.com
mlanXXX AT hotmail.com

运气好的话 ..

4

1 回答 1

2

我是一个广泛使用的 Firefox 单位转换扩展的作者,所以当人们想要在非对抗性环境中传达信息时,我对人们如何用人类语言编写东西有很多经验。也就是说,当他们没有受到积极试图审查他们的对手的阻碍时。我告诉你,即使在这种情况下,正则表达式也不可能总是弄清楚它们想要传达的内容。

为了提供这个答案,我需要很长的介绍:不,它不能完成。你能做的就是参加军备竞赛。也就是说,实现现在可以使用的任何简约正则表达式,然后持续监控用户的通信并根据他们提出的任何内容改进您的正则表达式以规避您。

但是请注意,您永远找不到令人满意的解决方案,因为很快您就会陷入烦人的误报中。以“我在 amazon.com 找到这双鞋”为例。您的代码会将其更改为“我发现这些 [审查]”。电话号码更糟糕,因为人们可以将选定的数字写成单词(“043three376five ...”),所以你最终不得不审查所有提到的任何数字。

这本质上是一个无法通过技术手段解决的社会问题。如果我是你,我会做的是实现几个明显的正则表达式(从而吸引 99% 的坦率用户),并通过社交规则执行规则。也就是说,通过驱逐试图规避它的人来执行 EULA。

于 2012-08-26T05:01:39.133 回答