特殊な文字の入力(エスケープシーケンス)

広告

文字を文字列を値として使用する場合、キーボードから入力できないような文字があります。例えば改行です。文字列の中で改行をキーボードから入力した場合は次のようになります。

alert("こんにちは
お元気ですか");

上記の例では「こんにちは」と「お元気ですか」の間で改行を入力しようとしましたがキーボードで「Enter」キーを押してもプログラムが改行されるだけです。前のページで記載した通り、JavaScriptで文字列の途中で改行することはできません。

そこで改行などキーボードから入力できない文字などは「¥」+特定の文字の組み合わせで表現します。例えば改行は「¥n」という「¥」と「n」の組み合わせによって表すことができます。

alert("こんにちは¥nお元気ですか");

上記では「こんにちは」と「お元気ですか」の間に「¥n」が記述されています。「¥n」は改行を表しますので実際に実行してみるとダイアログが開き次のように表示されます。

p2-1

このようにキーボードから入力できない文字を他の文字の組み合わせで表現したものをエスケープシーケンスといいます。

エスケープシーケンスの一覧

JavaScriptにおけるエスケープシーケンスとしては次のようなものが定義されています。

エスケープシーケンス意味
¥bバックスペース
¥t水平タブ
¥v垂直タブ
¥n改行
¥r復帰
¥f改ページ
¥'シングルクオーテーション
¥"ダブルクオーテーション
¥¥¥文字
¥0NULL文字
¥xXX2桁のXX(16進数)が表すLatin-1文字
¥uXXXX4桁のXXXX(16進数)が表すUnicode文字

改行や水平タブについてはキーボードから入力できない文字のためのエスケープシーケンスですが、「¥'」や「¥"」については次のような理由からエスケープシーケンスが用意されています。

文字列はシングルクオーテーションまたはダブルクオーテーションで囲んで表します。そこで例えばシングルクオーテーションが含まれる文字列を次のように記述したとします。

'It's a pen'

文字列を表すためにシングルクオーテーションを使った場合、この例では「t」と「s」の間にある「'」が文字ではなく文字列の終端を表す「'」だと解釈されてしまいます。その為、上記は「It」という文字列と「s a pen'」という文字列でない部分と解釈されてしまいます。

このような場合に「'」の代わりに「¥'」を記述すると、この「'」は文字の終端を表す「'」ではなく1つの文字としての「'」として扱われます。

'It¥'s a pen'

今度の場合は「It's a pen」という文字列と認識されます。

このように「¥」と言う記号は文字列の中で特殊な意味を持つため、「¥」という文字を特別な文字ではなく単なる文字の「¥」として使用したい場合にもエスケープシーケンスを使って「¥¥」と記述する必要があります。

サンプルコード

では簡単なサンプルで試してみます。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>JavaScript テスト</title>
</head>
<body>

<script type="text/javascript" src="./js/script2_1.js">
</script>

</body>
</html>
alert('改行のエスケープシーケンスは¥nです');

上記を実際にブラウザ見てみるとダイアログが開き次のように表示されます。

p2-2

ダイアログでは文字列の中に「¥n」が記述されています。この場合はエスケープシーケンスの「¥n」によって「¥n」が改行と解釈され文字列が途中で改行されています。

サンプルコード

もう一つ別のサンプルで試してみます。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>JavaScript テスト</title>
</head>
<body>

<script type="text/javascript" src="./js/script2_2.js">
</script>

</body>
</html>
alert('改行のエスケープシーケンスは¥¥nです');

上記を実際にブラウザ見てみるとダイアログが開き次のように表示されます。

p2-3

今度は文字列の中に「¥¥n」が記述されています。この場合はまずエスケープシーケンスの「¥¥」によって「¥¥」が単なる文字の「¥」と解釈されます。その為、「¥¥n」全体では文字の「¥」と文字「n」と解釈されるため改行ではなく「¥n」と画面に表示されます。

( Written by Tatsuo Ikura )