Javascript localeCompare with accents给了我奇怪的结果

时间:2018-04-10 04:19:59

标签: javascript unicode

我在Chrome,Firefox和Safari上使用en-US区域设置获得以下内容:

'é'.localeCompare('e')    // result is 1
'éa'.localeCompare('eb')  // result is -1

这对我来说似乎不对。

我希望如果str1 > str2然后(str1 + postfix1) > (str2 + postfix2),那么这就是词典排序的工作方式。然而上面的例子违反了这一点。

这是一个错误,还是我错过了什么?

有没有办法在Javascirpt中进行适当的词典排序?

1 个答案:

答案 0 :(得分:0)

您的代码缺少要与之比较的语言代码。

如果你用西班牙语比较它:

'é'.localeCompare('e', 'es') //=> 1
'éa'.localeCompare('ea', 'es') //=> 1
'éa'.localeCompare('eb', 'es') //=> -1

不同的语言会产生不同的结果,因为您可以阅读here

您可以在我创建的片段中播放。

干杯!



function doit() {
  var char1 = document.getElementById('char1').value;
  var char2 = document.getElementById('char2').value;
  var lang = document.getElementById('lang').value;
  document.getElementById('res').value = char1.localeCompare(char2, lang);
}

C1: <input id="char1" value="é"><br>
C2: <input id="char2" value="e"><br>
Lang: <input id="lang" value="es"><br>
Result: <input id="res"><br>
<input type="button" value="Do it" onclick="doit()">
&#13;
&#13;
&#13;