Force localeCompare to be case-sensitive

我只是一个虾纸丫 提交于 2019-12-04 00:33:11

LocalCompare can be case-sensitiv, enabled by { sensitivity: 'case'} or the unicode extension: u-kf-upper or u-kf-lower.

The spec of LocalCompare says, that:

The result is intended to order String values in the sort order specified by the system default locale

Or the locale you can add as argument.

The default for en-US for the case sensitive order is "lower" with:

aAbBcC ...

You could change it to "upper", which is:

AaBbCc ...

This test shows that switching from upper to lower does only affect the same letter, and does not sort uppercase-alphabet before lowercase or visa versa.

var b = "A".localeCompare("a", 'en-US-u-kf-lower'); //  1
var c = "A".localeCompare("a", 'en-US-u-kf-upper'); // -1
var d = "A".localeCompare("b", 'en-US-u-kf-upper'); // -1
var e = "A".localeCompare("b", 'en-US-u-kf-lower'); // -1

  • There might be a locale that sorts uppercase/lowercase differently, but I'm not aware of any...
  • the international sort order is case insensitive
  • ASCII sort order would be ACb
  • Some locales have different orders: Finnish for example treads V like W: Va Wb Vc ...

Does case-sensitivity affect numeric values in any way?

var b = "1".localeCompare("a", 'en-US-u-kf-lower'); //  -1
var c = "1".localeCompare("A", 'en-US-u-kf-upper'); // -1
var d = "104".localeCompare("a", 'en-US-u-kf-upper'); // -1

no, but ...

there is an option, how numeric values can be compared: kn

with the option or Unicode extension kn one can enable numeric comparison (kn-true):

var b = "10".localeCompare("2", 'en-US-u-kn-true'); // 1
var c = "10".localeCompare("2", 'en-US'); // -1

However, numbers are always before letters:

var d = "1".localeCompare("a", 'en-US-u-kn-true'); // -1
var e = "1".localeCompare("a", 'en-US'); // -1
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!