用 - 替换空格,但不是在 - 已经存在

时间:2015-02-17 13:22:46

标签: php replace preg-replace

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

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个空格。我的第二个替换填充了两个 - 。

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

5 个答案:

答案 0 :(得分:2)

你可以做一些简单的事情:

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

对于那些特定情况:

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

答案 3 :(得分:0)

$string = str_replace("--", "-", $string);

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

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

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

编辑: 更短的方式。两个步骤:删除奇怪的字符并将一个或多个空格替换为“ - ”:

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

答案 4 :(得分:0)

我会这样做:

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

<强>输出:

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