当字符串中存在空格时,字符串比较会给出错误的输出

时间:2016-02-19 08:06:50

标签: javascript jquery jquery-plugins javascript-objects jquery-events

我有两个字符串:

x = "hi hemant how r u"
y = "hi hemant how r u"

如果我们看到,两者看起来都一样,但

x === y gives false.

我检查两者的ascii值,这是不同的

x = "hi hemant how r u"
034 104 105 032 104 101 109 097 110 116 194 160 104 111 119 032 114 032 117 034

y = "hi hemant how r u"

034 104 105 032 104 101 109 097 110 116 032 104 111 119 032 114 032 117 034

区别在于194 160表示x中的空白区域,而032表示y中的空白区域。 当我写x === y

时,我想要一些返回true的东西

https://jsfiddle.net/hemantmalpote/ekzoveew/

2 个答案:

答案 0 :(得分:2)

您的文字是UTF-8,194 160转换为0x00A0,这是非破坏空间的Unicode代码点。这是与普通空格字符相同。请参阅here以获取相关的SO答案,并here for an extended Unicode info page查看无休息空间。

你可以用普通空格通过正则表达式替换所有空格然后进行比较,这里有一个答案:https://stackoverflow.com/a/1496863/2535335 - 在你的情况下:

x = x.replace(/\u00a0/g, " ");

答案 1 :(得分:0)

  

当我写x === y

时,我想要一些返回true的东西
var x = "hi hemant how r u";
var y = "hi hemant how r u";

使用普通空格" "

替换与空格匹配的所有内容
x.split( /\s+/ ).join( " " ) == y.split( /\s+/ ).join( " " ) //outputs true

在这里,我将与空格匹配的任何内容转换为单个空格" "

var x = "hi hemant how r u";
var y = "hi hemant how r u";
x = x.split( /\s+/ ).join( " " );
y = y.split( /\s+/ ).join( " " );

alert( x == y ); //alerts true
alert( x === y ); //alerts true