PHP / Regex:检查字符串是否是复制粘贴的

时间:2012-11-06 15:27:50

标签: php regex string validation

我正在尝试为字符串编写验证函数,我想检查该字符串是否为复制+粘贴工作。

背景:

我们有一个CMS,用户可以输入最少的描述文本 - 例如 - 200个字符。很多用户写的文本太短而且得到了#34;你必须使用超过200个字母"错误信息。 为了避免这种情况,他们会复制粘贴文本或一些虚拟字符串,例如" AAAAA"达到极限。

我现在正在寻找一个函数/ methode / regex来检测这样的复制+粘贴字符串并通过显示消息来阻止它们。

我知道没有100%的解决方案来阻止虚拟文本,但我们希望减少它一点点。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

不会有一个快速,可靠,不可战胜的解决方案。但我可以想到妥协:

preg_match('/(.{1,4})\1{3,}/', $subject)
对于包含一到四个字符的重复序列的字符串(当它们重复至少三次时),

将返回True

所以它会匹配像

这样的字符串
AAAAAAA
asdasdasdasd
foo bar baz glglglglglglglgl

它不会检测到更长的重复,如

asdfgasdfgasdfgasdfg

但是如果你试图匹配更长的重复,正则表达式的复杂性将呈指数级增长,所以我认为四个字符是可行的折衷方案。

或者,您可能希望将重复项锚定到字符串的末尾(大多数人会将填充符放在其中):

preg_match('/(.+)\1{3,}$/', $subject)

但当然是一个像

这样的字符串
LOL OMG!!!!!!!!!!!!!!!!!!!!!!!!!!!.

将无法检测到。您的选择:)