JavaScriptで簡単改行!nl2br関数の使い方10選

JavaScriptで改行を扱う方法を学ぶJS
この記事は約15分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればサンプルコードを活用して機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

この記事を読めば、JavaScriptで簡単に改行を扱えるようになります。

あなたも、改行に悩まされることなく、美しいレイアウトを実現しましょう。

●nl2br関数とは

nl2br関数は、JavaScriptで改行を扱うための関数です。

文字列内の改行コードを、HTMLの改行タグ(<br>)に変換することができます。

これにより、改行を含むテキストを表示する際に、見た目も適切に改行されるようになります。

●JavaScriptでnl2br関数を使う方法

○サンプルコード1:基本的な使い方

ここでは、JavaScriptのnl2br関数の基本的な使い方を紹介します。

このサンプルでは、改行を含む文字列を定義し、nl2br関数を使用して改行コードをHTMLの改行タグ(<br>)に変換しています。

// nl2br関数の定義
function nl2br(str) {
  // 改行コード(\n)を、<br>タグに置き換える
  return str.replace(/\n/g, '<br>');
}

// 改行を含む文字列を定義
var text = "こんにちは\n世界";

// nl2br関数を使用して改行タグに変換
var html = nl2br(text);
console.log(html); // "こんにちは<br>世界"

このコードでは、まずnl2br関数を定義しています。

この関数は、引数として渡された文字列(str)内の改行コード(\n)を、<br>タグに置き換えることで、改行を適切に表示できるようにしています。

正規表現(/\n/g)を使って、文字列内のすべての改行コードを検索し、replaceメソッドで<br>タグに置き換えています。

次に、改行を含む文字列(text)を定義し、nl2br関数を使用して改行コードを<br>タグに変換しています。

最後に、console.logで変換後の文字列(html)を出力しています。

結果として、「こんにちは<br>世界」という文字列が表示されます。

○サンプルコード2:フォーム入力の改行

このサンプルコードでは、テキストエリアに入力された改行を含む文字列を、nl2br関数を使用してHTML上で適切に表示する方法を紹介します。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>フォーム入力の改行を表示</title>
  <script>
    // nl2br関数の定義
    function nl2br(str) {
      return str.replace(/\n/g, '<br>');
    }

    // フォーム入力内容をHTML要素に反映する関数
    function showText() {
      var inputText = document.getElementById('inputText').value;
      var outputText = nl2br(inputText);
      document.getElementById('outputText').innerHTML = outputText;
    }
  </script>
</head>
<body>
  <textarea id="inputText" rows="4" cols="50"></textarea>
  <button onclick="showText()">表示</button>
  <div id="outputText"></div>
</body>
</html>

上記のHTMLファイルでは、nl2br関数を定義しています。

この関数は、前のサンプルコードと同様に、文字列内の改行コード(\n)を<br>タグに置き換える役割があります。

また、フォーム入力内容をHTML要素に反映するための関数(showText)も定義しています。

この関数は、テキストエリア(inputText)に入力された文字列を取得し、nl2br関数を使って改行コードを<br>タグに変換した後、出力用のdiv要素(outputText)に反映しています。

ユーザーがテキストエリアに文字列を入力し、「表示」ボタンをクリックすると、showText関数が実行され、改行が含まれた入力内容がHTML上で適切に表示されます。

○サンプルコード3:HTML要素内での改行

JavaScriptでHTML要素内に動的に改行を挿入する際、nl2br関数を利用することができます。

次のサンプルコードでは、JavaScriptを使ってHTML要素内の文字列に改行を追加しています。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>HTML要素内での改行</title>
  <script>
    // nl2br関数の定義
    function nl2br(str) {
      return str.replace(/\n/g, '<br>');
    }

    // 文字列に改行を追加して表示
    function addLineBreaks() {
      var text = "こんにちは\n世界";
      var html = nl2br(text);
      document.getElementById('textElement').innerHTML = html;
    }
  </script>
</head>
<body onload="addLineBreaks()">
  <div id="textElement"></div>
</body>
</html>

上記のHTMLファイルでは、先ほどと同じnl2br関数を定義しています。

また、文字列に改行を追加して表示するための関数(addLineBreaks)も定義しています。

addLineBreaks関数では、まず改行を含む文字列(text)を作成し、次にnl2br関数を使って改行コード(\n)を<br>タグに置き換えます。

そして、置き換えた結果の文字列(html)を、HTML要素(textElement)のinnerHTMLプロパティに代入します。

body要素のonload属性にaddLineBreaks関数を設定することで、ページが読み込まれる際にこの関数が実行され、改行を含む文字列がHTML要素内で適切に表示されます。

次に、nl2br関数の応用例としてリスト表示での改行方法を紹介します。

○サンプルコード4:リスト表示での改行

リスト表示でも改行が必要な場合があります。

次のサンプルコードでは、JavaScriptで作成した配列の各要素に改行を挿入して、リスト表示を行います。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>リスト表示での改行</title>
  <script>
    // nl2br関数の定義
    function nl2br(str) {
      return str.replace(/\n/g, '<br>');
    }

    // 配列の要素を改行付きで表示
    function showListWithLineBreaks() {
      var list = ['りんご', 'みかん', 'ぶどう'];
      var text = list.join('\n');
      var html = nl2br(text);
      document.getElementById('listElement').innerHTML = html;
    }
  </script>
</head>
<body onload="showListWithLineBreaks()">
  <div id="listElement"></div>
</body>
</html>

このHTMLファイルでは、nl2br関数と配要素を改行付きで表示するための関数(showListWithLineBreaks)も定義しています。

showListWithLineBreaks関数では、まず配列(list)を作成し、その配列の要素をjoinメソッドを使って改行コード(\n)で連結した文字列(text)を作成します。

そして、nl2br関数を使って改行コードを<br>タグに置き換えた後、置き換えた結果の文字列(html)を、HTML要素(listElement)のinnerHTMLプロパティに代入します。

body要素のonload属性にshowListWithLineBreaks関数を設定することで、ページが読み込まれる際にこの関数が実行され、リストの要素が改行付きで適切に表示されます。

続いて、チャットアプリでの改行方法を紹介します。

○サンプルコード5:チャットアプリでの改行

チャットアプリでは、ユーザーが入力したメッセージ内に改行が含まれることがよくあります。

下記のサンプルコードでは、チャットアプリで改行を正しく表示する方法を示しています。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>チャットアプリでの改行</title>
  <script>
    // nl2br関数の定義
    function nl2br(str) {
      return str.replace(/\n/g, '<br>');
    }

    // メッセージを追加する関数
    function addMessage() {
      var inputMessage = document.getElementById('inputMessage').value;
      var formattedMessage = nl2br(inputMessage);
      var chatArea = document.getElementById('chatArea');
      chatArea.innerHTML += formattedMessage + '<br>';
    }
  </script>
</head>
<body>
  <textarea id="inputMessage" rows="4" cols="50"></textarea>
  <button onclick="addMessage()">送信</button>
  <div id="chatArea"></div>
</body>
</html>

上記のHTMLファイルでは、nl2br関数を定義しています。

また、メッセージを追加するための関数(addMessage)も定義しています。

addMessage関数では、まずテキストエリア(inputMessage)に入力された文字列を取得し、nl2br関数を使って改行コードを<br>タグに置き換えます。

その後、置き換えた結果の文字列(formattedMessage)を、チャットエリア(chatArea)のinnerHTMLプロパティに追加します。

ユーザーがテキストエリアにメッセージを入力し、「送信」ボタンをクリックすると、addMessage関数が実行され、メッセージ内の改行が適切に表示されます。

続いて、JSONデータでの改行方法を紹介します。

続いて、JSONデータでの改行方法を紹介します。

○サンプルコード6:JSONデータの改行

JSONデータ内に改行が含まれる場合、そのデータを正しく表示するためにも改行を適切に処理する必要があります。

下記のサンプルコードでは、JSONデータ内の改行を正しく表示する方法を示しています。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>JSONデータの改行</title>
  <script>
    // nl2br関数の定義
    function nl2br(str) {
      return str.replace(/\n/g, '<br>');
    }

    // JSONデータ内の改行を適切に表示
    function displayJSONWithLineBreaks() {
      var jsonData = '{"message": "こんにちは\\n世界"}';
      var data = JSON.parse(jsonData);
      var formattedMessage = nl2br(data.message);
      document.getElementById('jsonDisplay').innerHTML = formattedMessage;
    }
  </script>
</head>
<body onload="displayJSONWithLineBreaks()">
  <div id="jsonDisplay"></div>
</body>
</html>

上記のHTMLファイルでは、nl2br関数を定義し、JSONデータ内の改行を適切に表示する関数(displayJSONWithLineBreaks)も定義しています。

displayJSONWithLineBreaks関数では、まずJSONデータ(jsonData)を作成し、JSON.parseメソッドを使ってJavaScriptオブジェクトに変換します。

次に、nl2br関数を使って、オブジェクト内のメッセージの改行コードを<br>タグに置き換えます。

最後に、置き換えた結果の文字列(formattedMessage)を、HTML要素(jsonDisplay)のinnerHTMLプロパティに代入します。

body要素のonload属性にdisplayJSONWithLineBreaks関数を設定することで、ページが読み込まれる際にこの関数が実行され、JSONデータ内の改行が適切に表示されます。

続いて、注意点や対処法、カスタマイズ方法など、nl2br関数のさらなる活用について説明します。

●注意点

nl2br関数は、改行コードを<br>タグに置き換えるだけで、他のHTMLタグやエンティティには対応していません。

そのため、ユーザーが入力したテキストにHTMLタグやエンティティが含まれる場合、適切にエスケープ処理を行う必要があります。

●対処法

ユーザーが入力したテキストのHTMLタグやエンティティをエスケープするには、次のような関数を使用できます。

function escapeHtml(str) {
  return str.replace(/&/g, '&amp;')
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')
    .replace(/"/g, '&quot;')
    .replace(/'/g, '&#39;');
}

この関数は、入力されたテキスト内の特殊文字を対応するHTMLエンティティに置き換えます。

これにより、テキスト内のHTMLタグがそのまま表示されることがなく、安全に表示できます。

●カスタマイズ方法

nl2br関数をカスタマイズすることで、改行の表示方法や、複数の改行文字に対応した処理が可能になります。

○サンプルコード7:カスタム改行タグ

デフォルトのnl2br関数では、改行コードを<br>タグに置き換えていますが、他のタグを使用したい場合もあります。

下記のサンプルコードでは、カスタム改行タグを指定できるように、nl2br関数を改良しています。

function nl2brCustom(str, customTag) {
  return str.replace(/\n/g, customTag);
}

var inputText = "こんにちは\n世界";
var customLineBreak = '<br class="custom">';
var outputText = nl2brCustom(inputText, customLineBreak);

この改良版のnl2br関数(nl2brCustom)では、第二引数にカスタム改行タグを指定できます。

この例では、<br class="custom">というタグを指定していますが、他のタグや属性も自由に指定できます。

○サンプルコード8:複数の改行文字

改行コードには、\nだけでなく、\r\n\rも存在します。

次のサンプルコードでは、これら複数の改行文字に対応したnl2br関数を実装しています。

function nl2brMultiple(str) {
  return str.replace(/(?:\r\n|\r|\n)/g, '<br>');
}

var inputText = "こんにちは\r\n世界";
var outputText = nl2brMultiple(inputText);

この関数(nl2brMultiple)では、正規表現を使って\r\n\r\nのいずれかにマッチする部分を<br>タグに置き換えています。

○サンプルコード9:nl2br関数の拡張

これまでのカスタム改行タグと複数の改行文字に対応したnl2br関数を組み合わせて、最終的な拡張版のnl2br関数を実装しましょう。

function nl2brExtended(str, customTag) {
  customTag = customTag || '<br>';
  return str.replace(/(?:\r\n|\r|\n)/g, customTag);
}

var inputText = "こんにちは\r\n世界";
var customLineBreak = '<br class="custom">';
var outputText = nl2brExtended(inputText, customLineBreak);

この拡張版のnl2br関数(nl2brExtended)では、第二引数にカスタム改行タグを指定できます。指定がない場合は、デフォルトで<br>タグを使用します。

また、正規表現を使って、\r\n\r\nのいずれかにマッチする部分をカスタム改行タグに置き換えています。

これにより、様々なシチュエーションに対応できる柔軟な改行処理が可能になります。

まとめ

本記事では、テキスト内の改行コードをHTML上で表示するための様々な方法を紹介しました。

具体的には、フォーム入力やHTML要素内での改行、リスト表示やチャットアプリでの改行、JSONデータの改行など、多岐にわたるシーンでの改行処理を解説しました。

また、nl2br関数のカスタマイズや拡張についても触れました。

これらの方法を活用することで、ユーザーが入力したテキストを適切に表示し、快適なユーザーエクスペリエンスを提供することが可能です。

適切な改行処理を実装することで、ウェブアプリケーションの品質を向上させることができます。