理総研Webは、中学入試理科の暗記学習をA'n'Kingなどのデジタル教材でサポートする登録型eラーニングサイトです。
Name:
Pass:
理総研@中学受験専門:理科総合研究所
Front Page > Web Tech and Development Notes

理総研:技術情報と開発メモ

013:正規表現を使い、連続した改行コード・改行文字を取り除く

対象言語:PHP
キーワード:PHP 5.0 正規表現 パターンマッチ preg_replace 連続 複数 改行コード \n \r 改行文字 削除 3個以上 2個 trim textarea 空白
訪問者がテキストエリアに書き込みができるようなインタラクティブなサイトを構築する場合、入力された文章の内容はさておき、データの整合性を管理者がいちいちチェックしていては大変です。たとえ厳格なルールを設けても、性善説でやっていけるほどサイト運営は甘いモノではないと思うのですよ。
そこでサイト管理者としては、訪問者が入力したデータをチェックしたり整形したりというプロセスを自動化したい。大抵のことはhtmlspecialchars関数でクリアできても、わけも無く改行を乱発する書き込みにはイラッとするコトもある。いや、私は確実にイラッとする。
しかしただ改行コードを削除するだけでは整形しすぎなので、理総研ではよくあるパターンとして「3個以上の改行を2個にする」を以下のように実現しています。ついでに先頭と末尾の無駄な改行と空白も除去します。 改行コードを統一する、という意味でも良いかも知れません。
  • まずPOSTされたデータからHTMLタグ(<,>)やダブルクォーテーション("),シングルクォーテーション(')等特殊文字をHTMLエンティティに置換。超基本ですね。

$text = htmlspecialchars($_POST['text'], ENT_QUOTES);
この段階で入力されたテキストデータが以下のようであったとします。
世の中には3種類の人間が居る。(\n)
(\n)
それは、(\n)
(\n)
(\n)
『数を数えられる人間』と『数を数えられない人間』だ!!!(\n)

1段落と2段落の間は連続した改行コードが2個。2段落と3段落の間は連続した改行コードが3個。そして3段落の最後に改行コード1個。
  • 次にpreg_replace関数と正規表現によるパターンマッチで3個以上の連続した改行コード・改行文字を2個に固定します。同時にtrim関数で先頭と末尾の改行(たとえ1個でも)・空白を除去します。 以下ではバックスラッシュになってますけど、そこは「\」←円マークでOKです。

$text = trim(preg_replace("/(\r\n){3,}|\r{3,}|\n{3,}/", "\n\n", $text));
上記のテキストは以下のように変換されています。
世の中には3種類の人間が居る。(\n)
(\n)
それは、(\n)
(\n)
『数を数えられる人間』と『数を数えられない人間』だ!!!
  • trim関数は文字列の先頭と末尾のホワイトスペースを取り除くもので、ホワイトスペースとは空白だけでなく改行・タブも含みます。指定すれば特定の文字だけを取り除くことも可能です。 詳しくはリファレンスで→PHP: trim - Manual
著者 You Mizuguchi
  • PR
  • 理総研内ショートカット
  • 理総研セレクト
  • 投稿口コミ情報 (承認分)
> 目黒日本大学中学校
> 夙川中学校
> さいたま市立 大宮国際中等教育学校
> 報徳学園中学校
> 広島県立 広島叡智学園中学校
> 武蔵野大学中学校
> 横浜富士見丘学園中学校
> 桐蔭学園中等教育学校
> 桐蔭学園中学校男子部
> 桐蔭学園中学校女子部
: 理科視点・中学校情報 :
  • ブログ投稿履歴
  • 現在のピクセルプラネット
Pixel Planet - piximage/rsk-1/2019-04-21.png
:: RSK-1の開拓史へ ::
  • 理総研について
中学入試理科の日々の暗記学習をA'n'King(アンキング)などのデジタル教材でサポートする、登録制無料コンテンツサイトです。
:: 詳しくはコチラ ::
理総研 :2011.02.03 設立
管理人 :水口 佑 / Cordu-Roy
お仕事 : フリープログラマー
:大手進学塾理科講師
:テレビドラゼミ講師