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