2

我所拥有的是"text - something else“,现在我可以使用下面的代码将其转换为"text-something-else",但我对额外的替换不满意。

反正有没有合并成一行?

PHP:

$url = strtolower(str_replace(" ", "-", splitstring($item->item)));
$url = str_replace("---", "-", $url);

JS:

title = title.toLowerCase().replace(/ /g, '-');
title = title.replace(/---/g, '-');

后者替换了防止这个:"text---something-else",所以他们是需要的。

4

2 回答 2

5

使用正则表达式的力量:

preg_replace('/[ -]+/', '-', $str);

或者:

str.replace(/[ -]+/g, '-');

以上显然会用单数连字符替换任意数量的连字符或空格,这与您之前的逻辑略有不同。如果您想考虑任何其他字符,您可以轻松地执行以下操作:

/[\s_-]+/

以上将匹配任何空格、连字符或下划线。

作为在正则表达式中使用连字符时的警告,您应该确保它位于[bracketed]组的末尾,[abc-]否则您需要使用反斜杠将其转义,例如[a\-bc]. 这是因为正则表达式语法允许您匹配范围,例如0-9在这种情况下您不想要的范围。

于 2012-11-13T11:38:36.900 回答
0

试试(我没有测试过):

// php
$what_to_replace = array(" - ", " ");

// should process " - " first, so spaces around "-" should not be replaced twice
$url = strtolower(str_replace($what_to_replace, "-", splitstring($item->item)));

例子

于 2012-11-13T11:42:50.410 回答