4

テキスト領域のあるフォームがあります。ここに入力された文字列から最終的に複数のスペースと複数の改行を削除する必要があります。
複数のスペースを削除するためにこの関数を作成しました

function fix_multi_spaces($string)
{
    $reg_exp = '/\s+/';
    return preg_replace($reg_exp," ",$string);
}

この関数はスペースに適していますが、新しい行を置き換えて単一のスペースに変更することもできます。
複数のスペースを 1 つのスペースに、複数の改行を 1 つの改行に変更する必要があります。
どのようにできるのか?

4

3 に答える 3

6

使用する

preg_replace('/(( )+|(\\n)+)/', '$2$3', $string);

これは特にスペースと改行に対して機能します。他の空白文字 (\tタブなど) も対象にしたい場合は、正規表現に追加する必要があります。

この正規表現は 1 つ以上のスペースまたは1 つ以上の改行に一致し、一致をスペース (ただし、スペースが一致した場合のみ)および改行 (ただし、改行が一致した場合のみ) に置き換えることによって機能します。

更新:私が知らなかったそのような場合に合わせて調整された正規表現機能がいくつかあることがわかりました(コメントのcraniumonemptyに感謝します!)。おそらくより適切に正規表現を次のように書くことができます

preg_replace('/(?|( )+|(\\n)+)/', '$1', $string);
于 2012-04-24T09:43:18.247 に答える
-1

次の関数を使用して、複数のスペースと行を単一のスペースに置き換えることができます。

function test($content_area){

//Newline and tab space to single space

$content_area = str_replace(array("\r\n", "\r", "\n", "\t"), ' ', $content_area);

// Multiple spaces to single space ( using regular expression)

$content_area = ereg_replace(" {2,}", ' ',$content_area);

return $content_area;

}
于 2012-04-24T10:35:32.730 に答える
-1

正規表現の \s はすべての空白を意味することを知っています。これは、スペース、改行、タブなどを意味します。

複数のスペースを 1 つに、複数の改行を 1 つに置き換えたい場合は、preg_replace を 2 回呼び出すように関数を書き直す必要があります。1 回はスペースを置き換え、もう 1 回は改行を置き換えます...

于 2012-04-24T09:45:07.733 に答える