[英]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”和“B”相比,“a”与“a”相比具有相反的结果吗?
LocalCompare可以是case-sensitiv,由{ sensitivity: 'case'}
或unicode扩展名启用: u-kf-upper
或u-kf-lower
。
结果旨在按系统缺省语言环境指定的排序顺序对String值进行排序
或者您可以添加为参数的语言环境。
区分大小写顺序的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
ACb
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.