インタビュー記事や対談記事では、よくインタビュアーなどのコメントの文頭や会話の間を示すために、横棒2つ(長音やダッシュなどの記号)が入っています。
ーー たとえば、こんな感じですね。
この表記は文章も読みやすくなるため多くのサイトで見られる表現方法ですが、一方で各自が手入力していると、どうしても異なる種類の記号が混在してしまうことがあります。
先日もお客様からこんなご相談をいただきました。
そこで今回は、JavaScriptを使ってテキストを自動変換しつつ、横棒2つを1本の長い線につなげて表示させる方法をご紹介します。
ダッシュやハイフンなど主な横棒の種類
表記揺れの原因となる、横棒や横線に見える記号の種類については、主要なものだけでもかなりの数に上ります。
- ハイフンマイナス:-(U+002D)
- enダッシュ:–(U+2013)
- emダッシュ:—(U+2014)
- フィギュアダッシュ:‒(U+2012)
- クォーテーションダッシュ:―(U+2015)
- 全角ハイフンマイナス:-(U+FF0D)
- 全角長音:ー(U+30FC)
- 全角罫線:─(U+2500)
- スモールemダッシュ:﹘(U+FE58)
- スモールハイフンマイナス:﹣(U+FE63)
- 2emダッシュ:⸺(U+2E3A)
- 3emダッシュ:⸻(U+2E3B)
参考:ハイフンとかダッシュとかUnicodeにあるたくさんの横線(全135文字) – NaviPlus Engineers’ Blog
JavaScriptで横棒2つのテキスト要素を自動置換
今回ご紹介するのは、JavaScriptを使って、フロント側だけで様々な横棒2つの要素を自動で置換し、表示を統一させるためのコードです。
Vanilla JSとjQuery、2種類のコードを記載していますので、サイトにあわせてお使いいただければ幸いです。
Vanilla JSのコード
// 置換パターンを指定
const replacementPatterns = [
{ from: /ーー/g, to: '──' },
// 必要に応じて他のパターンを追加
// { from: /--/g, to: '──' },
// { from: /--/g, to: '──' },
];
// テキストを置換する関数
function replaceText(element) {
let content = element.innerText;
replacementPatterns.forEach(pattern => {
content = content.replace(pattern.from, pattern.to);
});
element.innerText = content;
}
// ページ上の特定の要素に対してテキスト置換を実行
document.addEventListener('DOMContentLoaded', () => {
// 置換を適用したい要素のセレクタを指定
const elements = document.querySelectorAll('.sample-text');
elements.forEach(replaceText);
});
jQuery用のコード
// 置換パターンを指定
const replacementPatterns = [
{ from: /ーー/g, to: '──' },
// 必要に応じて他のパターンを追加
// { from: /--/g, to: '──' },
// { from: /--/g, to: '──' },
];
// テキストを置換する関数
function replaceText() {
let content = $(this).text();
$.each(replacementPatterns, (_, pattern) => {
content = content.replace(pattern.from, pattern.to);
});
$(this).text(content);
}
// ページ上の特定の要素に対してテキスト置換を実行
$(document).ready(() => {
// 置換を適用したい要素のセレクタを指定
$('.sample-text').each(replaceText);
});
最初に、置換前と置換後のテキストをパターンとして指定します(3行目〜)。
今回は例として「長音(音引き)2つ」のみを対象にしていますが、それ以外にも水平線やハイフンなどの様々な表記揺れが存在する場合は、必要に応じて他の置換パターンを追加していきます。
次に、置換を適用したい要素のセレクタを指定します(21行目)。
なるべくスコープを狭くして指定すると、パフォーマンスが向上します。
置換前と置換後の比較
ーー こちらが置換する前のテキストです。
ーー こちらが置換された後のテキストです。
よくあるご質問
Q. emダッシュ(U+2014)2つで表示しても良いですか?
もちろんです。本来の日本語の約物ルールとしては、emダッシュ(U+2014)2つ「——」が正しい使い方となります。
ただし残念ながら、現状のWindows・Mac・スマートフォン等の主要環境では、デフォルトフォントのままでemダッシュ2つをつなげて表示させる方法が存在しません。
Webフォントを適用して表示を統一させることは可能ですが、ごく一部の表記揺れのためだけにWebフォントを利用するのは、ページの読み込み速度などを考慮するとあまりおすすめできません。
そのため、今回のコードでは罫線(U+2500)2つに変換する方法をご紹介しています。
同じ理由で罫線2つを採用している大手Webメディアもいくつか存在します。
(例:WIRED,jp、ナタリー、VOGUE JAPAN など)
ただ、約物ルールを最優先にしたい場合や、もしくはすでにemダッシュでも問題なく表示できるフォントを利用されているのであれば、emダッシュ(U+2014)2つに揃えるのがベストだと思われます。
Q. 2-emダッシュ(U+2E3A)の使用は問題がありますか?
たしかに、2-emダッシュ(U+2E3A)「⸺」はemダッシュ(U+2014)2つ分の長さを持つ横棒のため、簡単に表示を揃えることができます。
ただし英語圏での2-emダッシュは、文章内で名前や言葉を伏せたり、不適切な言葉を隠したりといった、少しネガティブな意味合いで使われます。
参考:What is a 2-Em Dash? (and When to Use It and How to Insert It)
また、2-emダッシュ(U+2E3A)や3-emダッシュ(U+2E3B)については、たとえばShift_JISなどUTF-8以外の文字コードの場合は表示できず、文字化けの原因になるというデメリットもあります。
そのため今回は、ほとんどの環境で問題なく閲覧できる、罫線(U+2500)2つに変換して表示する手法をご紹介しています。
Q. JavaScriptではなくデータ側で一括変換しても良いですか?
もちろん、データの一括変換ができる場合は、その方法が一番スマートでおすすめです。
システム変更や外部サイト出力による文字化けを防ぐためにも、あらかじめデータ側で揃えていただいた方が安心です。
今回の記事では、数が多くて1つ1つ直すのが大変といったお客様や、外部システムをご利用中などでデータ側での一括変換が難しいケースがあったため、フロント側のみで表記を統一させるコードを記載しました。
まとめ
今回はインタビューや対談記事でよく使われる、横棒2つの表記揺れを統一するための方法をご紹介しました。
Webサイトでは、システムやデザインによる制約や閲覧環境の違いなどにより、テキストの細かい表示調整がしづらい部分も多いのですが、できるだけ読みやすくわかりやすいサイトになるよう日々模索しています。
ちょっとした小ネタですが、皆様のサイト運用に少しでもお役に立てれば幸いです。
株式会社プレスマンはお客様のプロジェクトの一員となり、Web開発やサイト運用などの多岐にわたり現場の課題解決をお手伝いします。「こんなことまで頼んで大丈夫?」という内容でも、まずはお気軽にご相談ください。
AIの導入に躊躇されている企業様は、まずは1つのツールだけでも利用してみてはいかがでしょうか?EC×ChatGPTをはじめとしたAI企画から導入・運用まで、経験豊富な弊社プロ人材が手厚くサポートいたします。