preg_replace从字符串中删除电话号码


preg_replace to remove phone numbers from a string

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

我在下面使用它有点成功,但它不能做我想做的事情,即…在匹配所有场景中

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模式来识别它们吗?

也需要对电子邮件地址做同样的事情,我想在我们在电子邮件文本中找到的每个电子邮件地址中都用[审查]来替换它们。i、 e

mlanXXX@hotmail.com
mlanXXX AT hotmail.com

祝你好运。。

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

我需要很长的介绍才能给出这个答案:不,这是不可能的。你能做的就是参与军备竞赛。也就是说,实现任何现在有效的极简正则表达式,然后不断监控用户的通信,并根据他们提出的任何改进正则表达式,以绕过您。

然而,请注意,你永远不会找到令人满意的解决方案,因为很快你就会陷入令人讨厌的误报中。举个例子,"我在amazon.com上找到了这双鞋"。你的代码会把它改为"我找到了这些[审查]"。电话号码甚至更糟,因为人们可以把选定的数字写成单词("043three3765…"),所以你最终不得不审查所有提到的任何号码。

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