PHP preg_match 匹配连续的换行符

PHP preg_match match consecutive newline chars

我试图阻止某些类型的帖子出现在我的网站上,这些帖子主要是为了让它们看起来像是包含一些内容,但实际上只是垃圾邮件。具体来说,帖子是一些随机单词、一些换行符和一个随机字符。

所以,我知道一些合法用户可能习惯于使用两个换行符(在段落之间创建一个空行),但我认为 3+ 可以标记为垃圾邮件。

我在 regex101 上测试了这个正则表达式,它工作正常,但是当我在我的网站上测试时从未触发过,关于为什么的任何想法?当我取消注释回显行时,它会显示我的测试数据的数字 4,所以我知道它看到了换行符。我的正则表达式格式不正确吗?!

测试数据:

This is a potential


spam post

代码:

//echo substr_count($lowercaseBody, "\n");
if (preg_match('/\n{3,}./',  $lowercaseBody)){
    error("Stop Spamming my chan you .");
}

数据可能包含 CRLF,而不仅仅是 LF

substr_count 测试不关心交错 CR,但您的正则表达式模式关心。

使用 (\r?\n) 而不是 \n 以允许 CRLFLF(不同的 browsers/OS 可能使用不同的换行):

if (preg_match('/(\r?\n){3,}./',  $lowercaseBody)){
    error("Stop Spamming my chan you .");
}