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

String compare gives wrong output when white space is present in string

本文关键字:字符串 出错 错误 输出 存在 空格 比较      更新时间:2023-09-26

我有两个字符串:

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 中的空格。我想要一些返回 true 的东西,当我写 x === y

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

您的文本是 UTF-8,194 160转换为 0x00A0 ,这是不间断空格的 Unicode 码位。这与普通的空格字符不同。有关相关的 SO 答案,请参阅此处,有关无间断空间的扩展 Unicode 信息页面,请参阅此处。

您可以通过正则表达式将所有空格替换为普通空格并进行比较,这是一个 SO 答案: https://stackoverflow.com/a/1496863/2535335 - 在您的情况下:

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

我想要一些返回 true 的东西,当我写 x === y

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