我拥有的是"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"
,所以他们需要。
答案 0 :(得分:5)
使用正则表达式的强大功能:
preg_replace('/[ -]+/', '-', $str);
或:
str.replace(/[ -]+/g, '-');
上面显然会用单个连字符替换任意数量的连字符或空格,这与之前的逻辑略有不同。如果您想考虑任何其他角色,您可以轻松地执行以下操作:
/[\s_-]+/
以上将匹配任何空格,连字符或下划线。
在正则表达式中使用连字符时,请注意,您应确保它位于[bracketed]
组的末尾,即[abc-]
,否则您需要使用反斜杠将其转义,比如[a\-bc]
。这是因为正则表达式语法允许您匹配0-9
之类的范围,这些范围将不是您在此情况下的意图。
答案 1 :(得分: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)));
请参阅examples