zoukankan      html  css  js  c++  java
  • javascript中涉及到汉字的比较

    在使用js中的"=="进行字符串的比较时,发现在英文情况下是ok的,但在中文比较时则不行了。

    在网上搜索,提供了一个解决方法,使用

    stringObject.localeCompare(target)

    来解决中文比较问题。

    string_a.localeCompare(string_b);
    
    /* Returns:
    
     0:  exact match
    
    -1:  string_a < string_b
    
     1:  string_b > string_b
    
     */

    这个方法的用法是:确定两个字符串在当前区域设置中是否相等。

    微软资料如下:

    http://msdn.microsoft.com/zh-cn/library/ie/62b7ahzy(v=vs.94).aspx

    localeCompare 方法 (String) (JavaScript)

    确定两个字符串在当前区域设置中是否相等。

     
     
    stringVar.localeCompare(stringExp[, locales][, options]) 
    
    参数
     
    stringVar

    必需。 要比较的第一个字符串。

    stringExp

    必需。 要比较的第二个字符串。

    locales

    可选。 包含一种或多种语言或区域设置标记的区域设置字符串数组。 如果包含多个区域设置字符串,请以降序优先级对它们进行排列,确保首个条目为首选区域位置。 如果省略此参数,则使用 JavaScript 运行时的默认区域设置。 此参数必须符合 BCP 47 标准;请参见 Intl.Collator 对象了解详细信息。

    options

    可选。 包含指定比较选项的一个或多个特性的对象。请参见 Intl.Collator 对象了解详细信息。

    备注
     

    对于比较字符串,可以指定 String 对象或字符串文本。

    从 Internet Explorer 11 开始,localeCompare 在内部使用 Intl.Collator 对象进行比较,添加对 locales 和options 参数的支持。 有关这些参数的详细信息,请参见 Intl.Collator 和 Intl.Collator.compare

    重要事项

    locales 和 options 参数在所有的文档模型和浏览器版本中均不支持。 有关详细信息,请参见“要求”部分。

    localeCompare 方法对 stringVar 和 stringExp 执行区分区域设置的字符串比较,并返回以下结果之一,这取决于系统默认区域设置的排序顺序:

    • -1,如果 stringVar 排在 stringExp 之前。

    • +1,如果 stringVar 排在 stringExp 的后面。

    • 如果两个字符串相等,则为 0(零)。

    示例
     

    下面的代码演示如何使用 localeCompare

     
    var str1 = "def";
    var str2 = "abc"
    
    document.write(str1.localeCompare(str2) + "<br/>");
    
    // Output: 1
    var str3 = "ghi";
    
    document.write(str1.localeCompare(str3)+ "<br/>");
    
    // Output: -1
    var str4 = "def";
    
    document.write(str1.localeCompare(str4));
    
    // Output: 0
    

    下面的代码显示如何使用具有德语(德国)区域设置的 localeCompare

     
    var str1 = "a";
    var str2 = "b";
    
    document.write(str1.localeCompare(str2, "de-DE"));
    
    // Output
    // - 1
    

    下面的示例显示如何使用具有德语(德国)区域设置和指定德语电话簿排序顺序的区域设置特定扩展的localeCompare。 此示例演示了特定于区域设置的差异。

     
    var arr = ["ä", "ad", "af", "a"];
    
    document.write(arr[0].localeCompare(arr[1], "de-DE-u-co-phonebk"));  // Returns 1
    document.write (arr[0].localeCompare(arr[2], "de-DE-u-co-phonebk"));  // Returns -1
    document.write (arr[0].localeCompare(arr[3], "de-DE-u-co-phonebk"));  // Returns 1
    
    document.write (arr[0].localeCompare(arr[1], "de-DE"));  // Returns -1
    document.write (arr[0].localeCompare(arr[2], "de-DE"));  // Returns -1
    document.write (arr[0].localeCompare(arr[3], "de-DE"));  // Returns 1
    
    
    要求
     

    在以下文档模式中受支持:Quirks、Internet Explorer 6 标准模式、Internet Explorer 7 标准模式、Internet Explorer 8 标准模式、Internet Explorer 9 标准模式、Internet Explorer 10 标准模式和 Internet Explorer 11 标准模式。此外,也在应用商店应用(Windows 8 和 Windows Phone 8.1)中受支持。请参阅版本信息

    locales 和 options 参数:

    在 Internet Explorer 11 标准文档模式下支持此项。此外,也在应用商店应用(Windows 8.1 和 Windows Phone 8.1)中受支持。请参阅版本信息

    在以下文档模式中不受支持:Quirks、Internet Explorer 6 标准模式、Internet Explorer 7 标准模式、Internet Explorer 8 标准模式、Internet Explorer 9 标准模式和 Internet Explorer 10 标准模式。在 Windows 8 中不受支持。

  • 相关阅读:
    Angularjs 设置全局变量的3种方法
    prevent to do sth 与 prevent sb (from) doing 用法
    软件测试技术对程序员的重要性
    Javascript中setTimeout()以及clearTimeout( )的使用
    Javascript异步编程的常用方法
    软件设计原则总结
    为sublime Text3 安装插件JS Format
    javascript中 if(变量)和if(变量==true)的区别
    Ping 命令
    ipconfig
  • 原文地址:https://www.cnblogs.com/davidwang456/p/4167033.html
Copyright © 2011-2022 走看看