String.prototype.localeCompare()

この記事は翻訳が完了していません。 この記事の翻訳にご協力ください

localeCompare() メソッドは参照文字列がソート順で引数で与えられた文字列と大なり、小なり、等しいとなるかどうかを示す数値を返します。

新しいlocalesoptions 引数によってアプリケーションはソート順で使われる言語を指定し関数の振る舞いをカスタマイズできます。古い実装では、locales引数とoptions引数は無視されます。使用されるローケルとソート順は完全に実装依存しています。

構文

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

引数

どのブラウザがlocales引数とoptions引数をサポートしているか確かめるために、ブラウザ実装状況 セクションを調べて下さい。 特徴検出のために、例: locales引数とoptions引数をサポートしているか調べるを調べて下さい。

compareString
参照している文字列と比較する文字列

戻り値

A negative number if the reference string occurs before the compare string; positive if the reference string occurs after the compare string; 0 if they are equivalent.

説明

Returns an integer indicating whether the referenceStr comes before, after or is equivalent to the compareStr.

  • Negative when the referenceStr occurs before compareStr
  • Positive when the referenceStr occurs after compareStr
  • Returns 0 if they are equivalent

DO NOT rely on exact return values of -1 or 1. Negative and positive integer results vary between browsers (as well as between browser versions) because the W3C specification only mandates negative and positive values. Some browsers may return -2 or 2 or even some other negative or positive value.

例: localeCompare()を使う

次の例では、ある文字列が大なり、小なり、等しいとなる異なる潜在的な結果を実証します。:

console.log('a'.localeCompare('c')); // -2, or -1, or some other negative value
console.log('c'.localeCompare('a')); // 2, or 1, or some other positive value
console.log('a'.localeCompare('a')); // 0

上記のコードで示される結果はブラウザ間やバージョン間で異なることに注意して下さい。値が実装依存のためです。すなわち、仕様では小なり、大なりの値は、負の値、正の値であることのみ要求しています。

Sort an array

localeCompare enables a case-insensitive sort of an array.

var items = ['réservé', 'Premier', 'Cliché', 'communiqué', 'café', 'Adieu'];
items.sort((a, b) => a.localeCompare(b, 'fr', {ignorePunctuation: true})); // ['Adieu', 'café', 'Cliché', 'communiqué', 'Premier', 'réservé']

例: locales引数とoptions引数をサポートしているか調べる

locales引数とoptions引数はすべてのプラウザでまだサポートされていません。実装がすでにサポートしているか調べるために、RangeError例外で違法な言語タグが拒否される要件を使用してください。:

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

例: localesを使う

localeCompare()によって得られる結果は言語間で違います。アプリケーションのユーザインターフェイスで使用される言語のソート順を得るために、 locales引数を使用してその言語(そしておそらくいくつかのフォールバック言語)を指定していることを確かめて下さい。:

console.log('ä'.localeCompare('z', 'de')); // a negative value: in German, ä sorts with a
console.log('ä'.localeCompare('z', 'sv')); // a positive value: in Swedish, ä sorts after z

例: optionsを使う

localeCompare()によって得られる結果はoptions引数を使用することによってカスタマイズされます。:

// in German, ä has a as the base letter
console.log('ä'.localeCompare('a', 'de', { sensitivity: 'base' })); // 0

// in Swedish, ä and a are separate base letters
console.log('ä'.localeCompare('a', 'sv', { sensitivity: 'base' })); // a positive value

Numeric sorting

// by default, "2" > "10"
console.log("2".localeCompare("10")); // 1

// numeric using options:
console.log("2".localeCompare("10", undefined, {numeric: true})); // -1

// numeric using locales tag:
console.log("2".localeCompare("10", "en-u-kn-true")); // -1

性能

大きな配列をソートするような、多数の文字列を比較するとき、Intl.Collatorオブジェクトを生成して、compareプロパティによって得られる関数を使用するほうが良いです。

仕様

仕様 状況 コメント
ECMAScript 3rd Edition. Standard Initial definition. Implemented in JavaScript 1.2.
ECMAScript 5.1 (ECMA-262)
String.prototype.localeCompare の定義
標準
ECMAScript 2015 (6th Edition, ECMA-262)
String.prototype.localeCompare の定義
標準
ECMAScript Internationalization API 1.0 (ECMA-402)
String.prototype.localeCompare の定義
標準 locale and option parameter defintions

ブラウザ実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
localeCompareChrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 5.5Opera 完全対応 7Safari 完全対応 3WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
localesChrome 完全対応 24Edge 完全対応 12Firefox 完全対応 29IE 完全対応 11Opera 完全対応 15Safari 完全対応 10WebView Android 未対応 なしChrome Android 完全対応 26Firefox Android 未対応 なしOpera Android 未対応 なしSafari iOS 完全対応 10Samsung Internet Android 完全対応 1.5nodejs 完全対応 13.0.0
完全対応 13.0.0
部分対応 0.12
補足
補足 Prior to Node.js 13.0.0, only the locale data for en-us is available by default. When other English locales are specified, the function silently falls back to en-us. When other languages are specified, it throws a RangeError. In order to make full ICU (locale) data available for versions prior to 13, see docs on the --with-full-icu= flag and how to provide the data.
optionsChrome 完全対応 24Edge 完全対応 12Firefox 完全対応 29IE 完全対応 11Opera 完全対応 15Safari 完全対応 10WebView Android 未対応 なしChrome Android 完全対応 26Firefox Android 未対応 なしOpera Android 未対応 なしSafari iOS 完全対応 10Samsung Internet Android 完全対応 1.5nodejs 完全対応 0.12

凡例

完全対応  
完全対応
未対応  
未対応
実装ノートを参照してください。
実装ノートを参照してください。

関連情報