2

私が持っているのは"text - something else"です。以下のコードで変換できますが"text-something-else"、余分な置換には不満があります。

それぞれを1行にマージする方法はありますか?

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 に答える