如何确定是否已发布电话号码


How to determine whether a phone number has been posted?

在我的一个网站上,我遇到了太多新用户不阅读规则并在公共场合发布电话号码的问题,这是违反规则的。

因此,为了结束这种情况,我想在发布帖子之前检查是否已提交电话号码。 确定电话号码是否出现在字符串中的最佳和最有效的方法是什么?

这是我对此的思考过程:

1) 电话号码至少为 10 位数字。

2)有时用户在电话号码中使用()-和空格。

因此,要检查是否已发布电话号码,似乎我必须获取帖子的字符串,从上面的2)中删除所有字符,然后搜索任何连续 10 位或更多数字的出现。

当然,这是可以规避的,

但绝大多数新用户并没有试图规避规则,他们只是在完全无视规则的情况下发布他们的电话号码,我不知道如何阻止他们,这样我就不必浪费那么多时间来审核网站。

我将如何在 PHP 中执行上述操作? 还是有更好的方法?

编辑:澄清一下,我的网站已经有一个"举报帖子"按钮供用户举报违规帖子,这就是我审核网站的方式,但我 90% 的审核时间都花在编辑电话号码并警告这些用户不要这样做上。我想通过在问题发生之前捕获问题并警告用户有关规则来"抢占"问题。当然,用户可以绕过它,但是我会禁止他们,因为他们被特别警告不要这样做,而且我无法理解许多用户故意忽略规则只是为了被禁止。所以我的解决方案将为我节省大量时间,缺点最小。我只是无法理解我的网站上输入 10 个或更多连续数字不是电话号码的许多情况,所以我不担心误报。

什么是最好的

手动检查帖子(我想这不是一个有效的选项,但它是最好的)。

最有效的方式

别这样。

当然,这是可以规避的,

错。它将被新用户和现有用户规避。

抱歉,这不是您问题的答案,但恕我直言,这是唯一正确的答案。


但是,您可以在帖子上运行一些正则表达式模式以检查其中是否有电话号码,但这样做有两个缺点:

  1. 用户将绕过这一点,您将无法捕获所有内容
  2. 您可能会收到误报,这对用户来说非常非常烦人。

如果你真的想走这条路,最好的做法是获取一大堆带有电话号码的帖子,并列出你在其中找到的所有可能的电话号码格式。获得该列表后,您可以基于此列表编写正则表达式模式。

您可以删除您在 2) 中提到的所有字符,然后使用如下所示的正则表达式: https://stackoverflow.com/a/3764902/1130734 找到这样的数字

$string = preg_replace('/[() -]+/','',$string);
$found = preg_match("/'+?[0-9][0-9()-'s+]{4,20}[0-9]/",$string);
if ($found==1){
    //tell user they may be breaking the rules and face a ban
}

您可能想更改正则表达式,使其仅匹配以零或加号开头的数字(不确定这是否正确...... /[0'+][0-9()-'s+]{4,20}[0-9]/

最好的办法是使用正则表达式搜索常见格式的电话号码。这可以通过经验不断审查和改进

然而,人类是一种狡猾的生物,所以你永远不会消灭它。

编辑

当然你可以使用PHP。

只需在代码中添加一些验证即可在您的网站上发布一些验证 - 即执行检查以确保帖子遵守规则。