如何将2个字符串与重音进行比较

时间:2017-05-04 10:30:23

标签: javascript string compare

我有2个字符串:

cities

但是当我比较它们时:

var a = 'António'
var b = 'António'

他们并不平等。如何才能做到这一点?

4 个答案:

答案 0 :(得分:1)

您可以使用localeCompare()方法。

string_a.localeCompare(string_b);

/ *预期回报:

0:完全匹配

-1:string_a< string_b

1:string_a> string_b

* /

答案 1 :(得分:0)

您的问题发生的原因可能是您的equals字符的表达方式不同。

您可以通过以下方式获得相同的字形:

  1. 使用Unicode字符

    equals

  2. 使用Unicode代码点

    'ó'

  3. 使用组合标记('o'+''')

    var a = 'António'

  4. 最后一个结合'o'(拉丁小写字母o)和'''(精确重音)。

    现在,如果你var b = 'Ant\u00F3nio',你将获得var c = 'Anto\u0301nio'。因为在这种情况下我使用Unicode字符并将其与其代码点进行比较,这是相同的事情。

    现在,如果你a === b,你将获得true。因为第一个是一个Unicode字符,第二个是将Unicode字符与组合标记组合,获得相同的字形。

    现在,如果我在控制台中粘贴a === cfalse输出,然后将它们粘贴到其他变量并进行比较,我会得到同样的结果。

    执行:a(来自c)和var x = 'António'(来自a),然后var y = 'António'将获得c。如果你在浏览器控制台中尝试这个并且得到x === y那么是正确的,否则SO可能已经处理了字符串并且难怪其他人得到false

    为了将falsetrue)与a'António')进行比较,您需要对表单进行规范化以获得相同的内容。

    因此你可以这样做:

    NFC(标准格式)(默认)

    c'Anto\u0301nio'

    因此,这会使a === c.normalize('NFC')a === c.normalize()表示相同。

    NFD(经典分解形式)

    c

    因此,这会使aa.normalize('NFD') === c表示相同。

    或者你可以只依靠一个表格并且不介意用于表示任何字符串的格式:

    a

    注意: JavaScript引擎使用UTF-16。这意味着如果您的角色位于基本多语言平面中且代码点位于ca.normalize() === c.normalize()之间,那么您将会很好。但是如果你使用该范围之上的某些字符(星界平面),则该字符将使用代理对来表示,因此每个代码单元具有16位代码单元。在这种情况下,如果字符串未规范化,某些操作可能不会产生预期的行为。

    注意:为了获得良好的阅读效果,您可以查看this

答案 2 :(得分:-1)

a == b对我来说是真的。作为旁注,您应该使用===

答案 3 :(得分:-1)

var a = "António";
var b = "António";

$(document).ready(function(){
	if(a == b){
  	alert(true);
  }else{
  	alert(false);
  }
});
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>