将空间替换为-,但不要在-已存在时替换


replace space with -, but not when - is already there

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

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替换中,我删除了除数字和字母之外的所有奇怪字符,但当一个名称已经包含-时,将有2个空格。我的第二个替代者用两个——填满了它们。

我怎样才能让它发挥作用?

您可能可以做这样简单的事情:

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

在替换第一个替换之前,请用空格替换"-"及其任何迭代(如"-"、"-"answers"-")。

对于这些特定情况:

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

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

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

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

编辑:还有更短的路。两个步骤:删除奇怪的字符并将一个或多个空格替换为"-":

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

我会这么做:

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

输出:

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