javascript - 强制 localeCompare 区分大小写

标签 javascript string-comparison

我正在尝试使用 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”相比和“B”与“a”相比不应该有相反的结果吗?

最佳答案

LocalCompare 可以区分大小写,由 { sensitivity: 'case'} 或 unicode 扩展:u-kf-upperu-kf 启用-降低

spec of LocalCompare 说,那:

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 只会影响同一个字母,并且不会将大写字母排在小写字母之前,反之亦然。

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

  • 可能有一个语言环境以不同方式对大写/小写进行排序,但我不知道任何...
  • 国际排序顺序不区分大小写
  • ASCII 排序顺序为 ACb
  • 一些语言环境有不同的顺序:例如芬兰语将 V 踩成 W:Va Wb Vc ...

区分大小写是否会以任何方式影响数值?

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 区分大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34861386/

相关文章:

javascript - Ionic - ion-nav-view 在模拟器中崩溃

javascript - 需要对以下类型的 Javascript 代码进行解释

bash - bash 中的字符串比较。 [[ : not found

ruby - Ruby 如何比较语义版本字符串?

javascript - 在 javascript 中获取某个单词之前的单词的最佳方法

javascript - 如何从 Vue js 中的方法访问数组中的属性?

c# - Entity Framework 中的字符串比较异常 FirstOrDefault

c# - String.StartsWith 使用 StringComparison.OrdinalIgnoreCase 的性能

c++ - 比较从函数返回的两个 std::string 常量(两个 json-spirit get_str()s)1-liner

javascript - onclick函数的使用方法