强制 localeCompare 区分大小写
Force localeCompare to be case-sensitive
我正在尝试使用 JavaScript 的 localeCompare 函数对字符串进行排序。
我对 运行 devTools 控制台中以下几行的结果感到惊讶:
"a".localeCompare("b") // returns: -1
"A".localeCompare("b") // returns: -1
另一个测试:
"b".localeCompare("a") // returns: 1
"B".localeCompare("a") // returns: 1
即使我对自己的排序更加具体,我也会得到相同的结果:
"a".localeCompare("b", { usage: "sort", sensitivity: 'variant' }) // -1
"A".localeCompare("b", { usage: "sort", sensitivity: 'variant' }) // -1
"b".localeCompare("a", { usage: "sort", sensitivity: 'variant' }) // 1
"B".localeCompare("a", { usage: "sort", sensitivity: 'variant' }) // 1
我想使用 localeCompare 以 区分大小写 的方式比较字符串,因此 "b" 与 "a" 和 [=28 相比不应该=] 与 "a" 相比有相反的结果?
LocalCompare 可以是 case-sensitiv,由 { sensitivity: 'case'}
或 unicode 扩展启用:u-kf-upper
或 u-kf-lower
。
The result is intended to order String values in the sort order
specified by the system default locale
或者您可以添加为参数的语言环境。
en-US 的 默认值是 "lower",其中:
aAbBcC ...
您可以将其更改为"upper",即:
AaBbCc ...
这个测试表明,从 upper
切换到 lower
只会影响同一个字母,并且不会将 uppercase-alphabet 排在小写字母之前,反之亦然。
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
- 可能有一个语言环境对 uppercase/lowercase 进行了不同的排序,但我不知道任何...
- 国际排序顺序不区分大小写
- ASCII 排序顺序为
ACb
- 有些语言环境有不同的顺序:例如芬兰语将 V 踩成 W:
Va Wb Vc
...
case-sensitivity 会以任何方式影响数值吗?
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
不,但是...
有一个选项,如何比较数值:kn
使用选项或 Unicode 扩展 kn
可以启用数字比较 (kn-true
):
var b = "10".localeCompare("2", 'en-US-u-kn-true'); // 1
var c = "10".localeCompare("2", 'en-US'); // -1
但是,数字总是在字母之前:
var d = "1".localeCompare("a", 'en-US-u-kn-true'); // -1
var e = "1".localeCompare("a", 'en-US'); // -1
我正在尝试使用 JavaScript 的 localeCompare 函数对字符串进行排序。
我对 运行 devTools 控制台中以下几行的结果感到惊讶:
"a".localeCompare("b") // returns: -1
"A".localeCompare("b") // returns: -1
另一个测试:
"b".localeCompare("a") // returns: 1
"B".localeCompare("a") // returns: 1
即使我对自己的排序更加具体,我也会得到相同的结果:
"a".localeCompare("b", { usage: "sort", sensitivity: 'variant' }) // -1
"A".localeCompare("b", { usage: "sort", sensitivity: 'variant' }) // -1
"b".localeCompare("a", { usage: "sort", sensitivity: 'variant' }) // 1
"B".localeCompare("a", { usage: "sort", sensitivity: 'variant' }) // 1
我想使用 localeCompare 以 区分大小写 的方式比较字符串,因此 "b" 与 "a" 和 [=28 相比不应该=] 与 "a" 相比有相反的结果?
LocalCompare 可以是 case-sensitiv,由 { sensitivity: 'case'}
或 unicode 扩展启用:u-kf-upper
或 u-kf-lower
。
The result is intended to order String values in the sort order specified by the system default locale
或者您可以添加为参数的语言环境。
en-US 的 默认值是 "lower",其中:
aAbBcC ...
您可以将其更改为"upper",即:
AaBbCc ...
这个测试表明,从 upper
切换到 lower
只会影响同一个字母,并且不会将 uppercase-alphabet 排在小写字母之前,反之亦然。
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
- 可能有一个语言环境对 uppercase/lowercase 进行了不同的排序,但我不知道任何...
- 国际排序顺序不区分大小写
- ASCII 排序顺序为
ACb
- 有些语言环境有不同的顺序:例如芬兰语将 V 踩成 W:
Va Wb Vc
...
case-sensitivity 会以任何方式影响数值吗?
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
不,但是...
有一个选项,如何比较数值:kn
使用选项或 Unicode 扩展 kn
可以启用数字比较 (kn-true
):
var b = "10".localeCompare("2", 'en-US-u-kn-true'); // 1
var c = "10".localeCompare("2", 'en-US'); // -1
但是,数字总是在字母之前:
var d = "1".localeCompare("a", 'en-US-u-kn-true'); // -1
var e = "1".localeCompare("a", 'en-US'); // -1