PHP正则表达式清理用户帖子
我正试图用正则表达式清理PHP中用户提交的评论,但已经变得相当混乱 是否可以使用正则表达式来:PHP正则表达式清理用户帖子,php,regex,Php,Regex,我正试图用正则表达式清理PHP中用户提交的评论,但已经变得相当混乱 是否可以使用正则表达式来: 删除重复两次以上的标点符号,以便: 天哪,太棒了变成天哪,太棒了 ------变为-- 变成 删除重复的短语(例如,用户复制并粘贴了一条消息),以便: spamspamspamspam变成spam 我喜欢复制和粘贴。我喜欢复制和粘贴。我喜欢复制和粘贴。变成了我喜欢复制和粘贴。 删除长度超过10个大写字母的字母和空格集合: 我喜欢大写字母,它们太棒了变成了我喜欢大写字母,它们太棒了 听起来不错
天哪,太棒了代码>变成
天哪,太棒了代码>
------代码>变为
--代码>
代码>变成
代码>
变成spamspamspamspam
spam
变成了我喜欢复制和粘贴。我喜欢复制和粘贴。我喜欢复制和粘贴。
我喜欢复制和粘贴。
变成了我喜欢大写字母,它们太棒了
我喜欢大写字母,它们太棒了
保持不变听起来不错
编辑: 如果无法使用正则表达式(或与其他PHP混合使用的正则表达式),您将如何操作?1:
// same punctuation repeated more than 2 times
preg_replace('#([?!.-])\1{2,}#', '$1$1', $string);
// sequence of different punctuations repeated more than one time
preg_replace('#([?!.-][?!.-]+?)\1+#', '$1', $string);
2:
3:
在这里尝试:一个好的经验法则是永远不要尝试“修复”用户输入。如果用户想在句子后键入4个感叹号,请允许它。没有理由不这么做
您应该更关注注入攻击,而不是像这样的事情。不要试图从技术上解决通信问题。你只能失败。我认为这个错误是在用户层面上的。在这种情况下,我同意re Wadih的评论,我不想解决这个问题(我不认为我可以),只是尝试执行一些合理的规则来帮助“限制”它+我想得很好。虽然对于#2,我会使用
(.+?)
,而不是(.*)
。为了防止它匹配0个事件。这些非常非常好,非常简单但却非常有效,它们肯定会将此页面标记为书签!我只能认为正则表达式中的“单词”行是正确的,但我不会在真正的用户输入中使用它们。例如,#1将“哦……不!”转换为“哦……不!”和#2将“cocoa”转换为“coa”或“pom-pom-pi-dou”转换为“pom-pi-dou”。还有“提提卡卡湖”?这是真的,也许我不会用它们,我同意你提出的观点!
// any sequence of characters repeated more than one time
preg_replace('#(.{2,}?)\1+#', '$1', $string);
// sequence of uppercase letters and spaces
function tolower_cb($match) {
return strtolower($match[0]);
}
preg_replace_callback('#([A-Z ]{10,})#', 'tolower_cb', $string);