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
以允许 CRLF
和 LF
(不同的 browsers/OS 可能使用不同的换行):
if (preg_match('/(\r?\n){3,}./', $lowercaseBody)){
error("Stop Spamming my chan you .");
}
我试图阻止某些类型的帖子出现在我的网站上,这些帖子主要是为了让它们看起来像是包含一些内容,但实际上只是垃圾邮件。具体来说,帖子是一些随机单词、一些换行符和一个随机字符。
所以,我知道一些合法用户可能习惯于使用两个换行符(在段落之间创建一个空行),但我认为 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
以允许 CRLF
和 LF
(不同的 browsers/OS 可能使用不同的换行):
if (preg_match('/(\r?\n){3,}./', $lowercaseBody)){
error("Stop Spamming my chan you .");
}