.localeCompare()

与えられた文字列と参照している文字列を比較して、順番が前なのか後なのか、それとも同じなのかを指し示す数値を返します。

localesoptions引数でアプリケーションに並び順で使用する言語を特定させて、 関数の振る舞いをカスタマイズすることが可能です。 古い実装環境では、localesoptions引数は無視され、 localeと並び順は実装依存になります。

文法

str.localeCompare(compareString [, locales [, options]])

ブラウザ互換性のセクションで、localesとoptions引数がサポートされるブラウザを確認してください。 また、機能状況を調べる「Example: Checking for support for locales and options arguments」も確認してみてください。

引数 説明
compareString 参照されている文字列(str)と比較する文字列を指定します。
locales

BCP47言語タグの文字列、またはそれらの文字列の配列を指定します。 locales引数の一般的な形式と説明については、 Intlページを参照してください。 下記のUnicode拡張キーが使用可能です。

co
特定の地域(locales)への異なる照合(Variant collations)です。(翻訳に自信なし) 指定可能な値は、"big5han", "dict", "direct", "ducet", "gb2312", "phonebk", "phonetic", "pinyin", "reformed", "searchjl", "stroke", "trad", "unihan"になります。 optionsプロパティのusageによって置換される"standard"と"search"は無視されます。(詳細は後述)
kn
"1" < "2" < "10"のような、数値照合が使用されるべきかどうかを指定します。 使用可能な値は、"true"と"false"です。 このオプションはoptionsプロパティ、またはUnicode拡張キーを通して設定することが可能です。 両方提供されている場合は、optionsプロパティが優先されます。
kf
大文字と小文字のどちらを、並び順の先にするのかを指定します。 指定可能な値は、"upper"、"lower"、または"false"(localeのデフォルトを使用)です。 このオプションはoptionsプロパティ、またはUnicode拡張キーを通して設定することが可能です。 両方提供されている場合は、optionsプロパティが優先されます。
options

下記のプロパティの一部または全てを含むオブジェクトを指定します。

localeMatcher
使用するlocaleでのマッチングのアルゴリズムを使用します。 指定可能な値は"lookup"と"best fit"で、デフォルトは"best fit"です。 このオプションについての情報は、 Intlのページを参照してください。
usage
比較が、並び順または、マッチする文字列の検索の、どちらのためのものなのかを指定します。 指定可能な値は、"sort"と"search"であり、デフォルトは"sort"になります。
sensitivity

どのような文字列の違いで、等しくない(0ではない)という結果にするかを指定します。 使用可能な値は下記の通りです。

  • "base": ベース文字が異なる場合のみを、等しくないとします。
    例: a ≠ b(等しくない)、 a = á, a = A(等しい)
  • "accent": ベース文字またはアクセントやその他の発音記号が異なる場合のみを、等しくないとします。
    例: a ≠ b, a ≠ á(等しくない)、a = A(等しい)
  • "case": ベース文字または大文字・小文字が異なる場合のみを、等しくないとします。
    例: a ≠ b(等しくない)、 a = á(等しい)、a ≠ A(等しくない)
  • "variant": ベース文字、アクセントやその他の発音記号、大文字・小文字が異なれば、等しくないとします。 別の比較方法を検討しても良いかもしれません。 例: a ≠ b, a ≠ á, a ≠ A(等しくない)

デフォルトは、usageが"sort"であれば"variant"になり、 usageが"search"であればlocaleに依存します。

ignorePunctuation 句読点を無視するか否かを指定します。 指定可能な値はtrueとfalseで、デフォルトはfalseになります。
numeric "1" < "2" < "10"のような数値の照合を使用するか否かを指定します。 指定可能な値はtrueとfalseで、デフォルトはfalseになります。 このオプションはoptionsプロパティ、またはUnicode拡張キーを通して設定可能で、 両方提供された場合は、optionsが優先されます。 実装はこのプロパティのサポートが必須としないため、サポートされていないかもしれません。
caseFirst 大文字と小文字、どちらが先に並ぶべきなのかを指定します。 指定可能な値は、"upper"、"lower"、または"false"(localeのデフォルトを使用)で、デフォルトは"false"です。 このオプションはoptionsプロパティ、またはUnicode拡張キーを通して設定可能で、 両方提供された場合は、optionsが優先されます。 実装はこのプロパティのサポートが必須としないため、サポートされていないかもしれません。

参照している文字列が、与えられた文字列とソートした際に、 前に来るか後ろに来るか、または同じなのかを指し示す数値が返されます。 compareStringよりも前に文字列が来る場合は、負の数が返され、 後ろに来る場合は正の数が返され、同じであれば0が返されます。

localeCompareの使用例

下記の例のデモは、後、前、同じとなる、それぞれの異なる結果を示しています。

alert('a'.localeCompare('c')); // -2、または-1、もしくはその他の負の値
alert('c'.localeCompare('a')); // 2、または1、もしくはその他の正の値
alert('a'.localeCompare('a')); // 0

上記のコードの結果は、ブラウザ間やバージョンの違いによって異なる結果になる可能性があるので注意してください。 これは実装仕様によるためです。 仕様で必要となるものは、前後を表す値が負の数なのか正の数なのかだけです。(翻訳に自信なし)

例: localesとoptions引数がサポートされているか確認

localesoptions引数はまだ全てのブラウザでサポートされていません。 これらのサポートが実装されているかを確認するには、 不正な言語タグを使用して、RangeError例外で拒絶される必要があります。

function localeCompareSupportsLocales() {
    try {
        "a".localeCompare​("b", "i");
    } catch (e) {
        return e​.name === "RangeError";
    }
    return false;
}

localesの使用例

localeCompareによる結果は、言語間で異なります。 アプリケーション上で、ユーザーが使用しているユーザーインターフェース言語の並び順を取得するには、 locales引数を使用して、その言語を特定します。(出来れば、フォールバック用の言語も)

// 負の数: ドイツでは、äがaより先に並べられます。
alert('ä'.localeCompare('z', 'de'));
// 正の数: スウェーデンでは、zの後ろにäが並びます。
alert('ä'.localeCompare('z', 'sv'));

optioinsの使用例

localeCompareによる結果は、options引数を使用してカスタマイズすることが可能です。

// ドイツでは、äはベース文字としてaを持ちます。
alert('ä'.localeCompare('a', 'de', {sensitivity: "base"})); // 0

// スウェーデンでは、äとaのベース文字は区別されます。
alert('ä'.localeCompare('a', 'sv', {sensitivity: "base"})); // 正の数

パフォーマンス

大規模な配列の並び替えのような、文字列を大量に比較するような場合、 Intl.Collatorオブジェクトを作成し、 そのcompareプロパティによって提供される関数を使用するのが良いでしょう。

仕様

ブラウザ互換性

デスクトップ
機能 Chrome Firefox
(Gecko)
IE Opera Safari
基本
localesと
options引数
24 29 (29) 11 15 ×
モバイル
機能 Android Chrome for
Android
Firefox
Mobile
IE
Mobile
Opera
Mobile
Safari
Mobile
基本
localesと
options引数
× 26 × × × ×

関連項目

 Back to top

© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.

このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。

  • 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
  • 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
  • MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
  • "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。