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



我有2个字符串:

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

但是,当我比较它们时:

if(a == b)

它们不等。一个人如何做到这一点?

您的问题发生了,因为您的'ó'字符可能会有所不同。

您可以通过写作获得相同的石墨:

  1. 使用Unicode字符

    var a = 'António'

  2. 使用Unicode代码点

    var b = 'Antu00F3nio'

  3. 使用组合标记('o' '´'(

    var c = 'Antou0301nio'

最后一个将'o'(拉丁小字母o(与'''(ACCUTE口音(结合在一起。

现在,如果您执行a === b,您将获得true。因为在这种情况下,我使用了Unicode字符,并将其与其代码点进行了比较。

现在,如果您执行a === c,您将获得false。因为第一个是一个Unicode字符,第二个字符是将Unicode字符与获得相同谱系的组合标记结合。

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

做:var x = 'António'(来自a(和var y = 'António'(来自c(,x === y将获得false。如果您在浏览器控制台中尝试此操作,并且获得了false,那么这是对的,否则可能已经处理了字符串,难怪其他人会得到true

为了将a('António'(与c('Antou0301nio'(进行比较,您需要标准化表单才能获得相同的东西。

因此,您可以做:

nfc(典型地构成表单((默认(

a === c.normalize('NFC')或仅a === c.normalize()

因此,这使得c的表示与a相同。

nfd(典型地构成表单(

a.normalize('NFD') === c

因此,这使得a的表示与c相同。

,或者您只能依靠双方的一种形式,并且不介意用于表示任何字符串的格式:

a.normalize() === c.normalize()

注意: JavaScript引擎使用UTF-16。这意味着,如果您的角色位于基本的多语言平面中,则具有U+0000U+FFFF之间的代码点,您将很好。但是,如果您使用以上范围(星体平面(上方的某些字符,则将使用替代对表示该字符,从而将两个代码单元分别为16位。在这种情况下

注意:为了进行良好的阅读,您可以检查一下。

您可以使用String.prototype.localeCompare()方法。

stringA.localeCompare(stringB);
/* Expected Returns:
 0:  exact match
-1:  stringA < stringB
 1:  stringA > stringB
 */

a == b对我返回。作为旁注,您可能应该使用===

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>

相关内容

  • 没有找到相关文章

最新更新