【问题标题】:replace space with -, but not when - is already there用 - 替换空格,但不是当 - 已经存在时
【发布时间】:2015-02-17 13:22:45
【问题描述】:

我正在尝试从我的数据库中获取产品名称并重写它们,名称如下所示:

Romper bedrukt met tekst - Lime maat 68

这是我的重写:

$string = preg_replace("/[^ \w]+/", "", $testlink['name']);
$string = str_replace(" ", "-", $string);

当名字是:

Romper bedrukt met tekst - Lime maat 68

它需要这样做:

Romper-bedrukt-met-tekst-Lime-maat-68

但它是这样做的:

Romper-bedrukt-met-tekst--Lime-maat-68

您可以看到双--,因为在第一个preg-replace 中,我删除了除数字和字母之外的所有奇怪字符,但是当名称已经包含-时,将有2 个空格。我的第二次替换用两个--填充它们。

我怎样才能让它工作?

【问题讨论】:

    标签: php replace preg-replace


    【解决方案1】:

    你可能会做一些像这样简单的事情:

    $string = 'Romper bedrukt met tekst - Lime maat 68';
    $slug = preg_replace('/\W+/', '-', $string));
    

    【讨论】:

    • 这是迄今为止最好的解决方案。请注意,\W 也不会匹配下划线字符。如果你也想替换它,那么让字符类更具体。
    【解决方案2】:

    在替换您的第一个替换之前,请将“-”及其任何迭代(例如“-”“-”和“-”)替换为空格。

    【讨论】:

      【解决方案3】:

      对于那些特定情况:

      $string = str_replace(array(' -','- ',' '), '-', $testlink['name']);
      

      【讨论】:

        【解决方案4】:
        $string = str_replace("--", "-", $string);
        

        或者将所有空格合并为一个:

        $string = preg_replace( "/\s+/", " ", $string );
        

        第二种方法将涵盖大多数或“奇怪”的文本。

        编辑: 和更短的方式。两步:去掉奇怪的字符,将一个或多个空格替换成“-”:

        $string = preg_replace( "/\s+/", "-", $string );
        

        【讨论】:

          【解决方案5】:

          我愿意:

          $string = 'Romper bedrukt met tekst - Lime maat 68';
          $string = preg_replace("/[ -]+/", "-", $string);
          echo $string,"\n";
          

          输出:

          Romper-bedrukt-met-tekst-Lime-maat-68
          

          【讨论】:

            猜你喜欢
            • 2014-08-05
            • 1970-01-01
            • 2013-01-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-03-11
            • 1970-01-01
            相关资源
            最近更新 更多