Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式清理用户帖子_Php_Regex - Fatal编程技术网

PHP正则表达式清理用户帖子

PHP正则表达式清理用户帖子,php,regex,Php,Regex,我正试图用正则表达式清理PHP中用户提交的评论,但已经变得相当混乱 是否可以使用正则表达式来: 删除重复两次以上的标点符号,以便: 天哪,太棒了变成天哪,太棒了 ------变为-- 变成 删除重复的短语(例如,用户复制并粘贴了一条消息),以便: spamspamspamspam变成spam 我喜欢复制和粘贴。我喜欢复制和粘贴。我喜欢复制和粘贴。变成了我喜欢复制和粘贴。 删除长度超过10个大写字母的字母和空格集合: 我喜欢大写字母,它们太棒了变成了我喜欢大写字母,它们太棒了 听起来不错

我正试图用正则表达式清理PHP中用户提交的评论,但已经变得相当混乱

是否可以使用正则表达式来:

  • 删除重复两次以上的标点符号,以便:

    • 天哪,太棒了变成
      天哪,太棒了
    • ------变为
      --
    • 变成
  • 删除重复的短语(例如,用户复制并粘贴了一条消息),以便:

    • spamspamspamspam
      变成
      spam
    • 我喜欢复制和粘贴。我喜欢复制和粘贴。我喜欢复制和粘贴。
      变成了
      我喜欢复制和粘贴。
  • 删除长度超过10个大写字母的字母和空格集合:

    • 我喜欢大写字母,它们太棒了
      变成了
      我喜欢大写字母,它们太棒了
    • 听起来不错
      保持不变
  • 你有什么建议吗

  • 这是一个学生系统(因此,至少要尝试整理他们发布的内容),尽管我不想过滤它或阻止他们的消息,只是用一些正则表达式“纠正”它

    谢谢你抽出时间


    编辑:

    如果无法使用正则表达式(或与其他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);