0

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

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

这是我对此的思考过程:

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

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

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

当然,这可以被规避,但绝大多数新用户并没有试图规避规则,他们只是发布他们的电话号码,完全不遵守规则,我不知道还有什么方法可以阻止他们,所以我不必浪费太多时间来审核网站。

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

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

4

3 回答 3

2

哪个最好

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

最有效的方式

不要这样做。

当然,这是可以绕过的,

错误的。新用户和当前用户都绕过它。

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


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

  1. 用户将规避这一点,您将无法将他们全部困住
  2. 您可能会得到误报,这对用户来说非常烦人。

如果你真的想走这条路,最好的做法是获取大量包含电话号码的帖子,并列出你在其中找到的所有可能的电话号码格式。一旦你有了这个列表,你就可以根据这个列表编写一个正则表达式模式。

于 2012-08-19T11:37:49.123 回答
1

您可以删除您在 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]/

于 2012-08-19T11:49:27.727 回答
0

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

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

编辑

当然你可以使用 PHP。

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

于 2012-08-19T11:43:21.630 回答