我正在尝试为字符串编写验证函数,我想检查该字符串是否为复制+粘贴工作。
背景:
我们有一个CMS,用户可以输入最少的描述文本 - 例如 - 200个字符。很多用户写的文本太短而且得到了#34;你必须使用超过200个字母"错误信息。 为了避免这种情况,他们会复制粘贴文本或一些虚拟字符串,例如" AAAAA"达到极限。
我现在正在寻找一个函数/ methode / regex来检测这样的复制+粘贴字符串并通过显示消息来阻止它们。
我知道没有100%的解决方案来阻止虚拟文本,但我们希望减少它一点点。有什么想法吗?
答案 0 :(得分:1)
不会有一个快速,可靠,不可战胜的解决方案。但我可以想到妥协:
preg_match('/(.{1,4})\1{3,}/', $subject)
对于包含一到四个字符的重复序列的字符串(当它们重复至少三次时),将返回True
。
所以它会匹配像
这样的字符串AAAAAAA
asdasdasdasd
foo bar baz glglglglglglglgl
它不会检测到更长的重复,如
asdfgasdfgasdfgasdfg
但是如果你试图匹配更长的重复,正则表达式的复杂性将呈指数级增长,所以我认为四个字符是可行的折衷方案。
或者,您可能希望将重复项锚定到字符串的末尾(大多数人会将填充符放在其中):
preg_match('/(.+)\1{3,}$/', $subject)
但当然是一个像
这样的字符串LOL OMG!!!!!!!!!!!!!!!!!!!!!!!!!!!.
将无法检测到。您的选择:)