【问题标题】:Preg_replace multiple patternsPreg_replace 多个模式
【发布时间】:2012-06-28 17:11:07
【问题描述】:

我正忙于一个网站,对于一个元素,我使用 preg_replace 用破折号替换所有空格。

preg_replace('/\\s/', '-', $item_replace_en[0])

这很好用,但现在我遇到了一个新问题。用户输入了以下“音乐/电影”。 输出是“音乐/电影”,我希望它是“音乐电影”。

我怎样才能做到这一点?

【问题讨论】:

  • 当用户输入“音乐,电影”时,您是否会再次询问?如果没有,请花时间更准确地指定您想要的内容。

标签: php preg-replace


【解决方案1】:

您可以在模式和替换文本中使用数组。 例如

$pattern=array();
$pattern[0]="/\\s/";
$pattern[1]="/-\/-/";
$replace=array();
$replace[0]="-";
$replace[1]="-";
preg_replace($pattern, $replace, $item_replace_en[0]);

您可以使用任意数量的模式和替换。 更多信息请参考http://php.net/manual/en/function.preg-replace.php

【讨论】:

    【解决方案2】:

    试试这个:

    $returnValue = preg_replace('/(\\s\\/)?(\\s)/', '-',$item_replace_en[0]);
    

    但这不会替换像 "Music/ Film""Music /Film"Music/Film 这样的字符串。

    【讨论】:

      【解决方案3】:

      您似乎正在尝试生成一个可用作 URL 的字符串。

      当用户添加要转换为 URL 安全字符串的标题时,可能会发生许多情况。例如有人可以使用这个:

      Mess'd up --text-- just (to) stress /test/ ?our! `little` \\clean\\
      url fun.ction!?-->"); 
      

      应该返回:

      messd-up-text-just-to-stress-test-our-little-clean-url-function

      您的代码准备好了吗?在这种情况下,您可以使用此功能:

      setlocale(LC_ALL, 'en_US.UTF8');
      function toAscii($str, $replace=array(), $delimiter='-') {
          if( !empty($replace) ) {
              $str = str_replace((array)$replace, ' ', $str);
          }
      
          $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
          $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean);
          $clean = strtolower(trim($clean, '-'));
          $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean);
      
          return $clean;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-27
        • 1970-01-01
        • 1970-01-01
        • 2017-12-21
        • 2015-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多