【问题标题】:String compare gives wrong output when white space is present in string当字符串中存在空格时,字符串比较给出错误的输出
【发布时间】:2016-05-31 17:33:45
【问题描述】:

我有两个字符串:

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/

【问题讨论】:

  • 你能在小提琴中重现这个吗,因为我得到x === y 是真的
  • 一个空间与另一个空间有何不同?
  • 空格在任何地方都有相同的 ASCII 值....有什么不同?
  • 我将添加 jsfiddle 链接
  • 我添加了 js fiddle 请检查

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


【解决方案1】:

您的文本是 UTF-8,194 160 转换为 0x00A0,这是不间断空格的 Unicode 代码点。这与普通的空格字符相同。请参阅here 以获得相关的 SO 答案和here for an extended Unicode info page 关于 NO-BREAK SPACE。

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

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

【讨论】:

  • 那么在同一个 utf8 环境下,两个空格怎么会不一样呢?
  • 普通空格和不间断空格是不同的字符,还有什么好说的?
  • 我想知道它们是如何制作的?
  • 在 HTML 中,您可以添加  ,如果用户复制文本,它将被转换为 Unicode NO-BREAK-SPACE。在 Windows 上,我相信你可以直接通过 alt-something 插入它
  • @HemantMalpote 不幸的是,这似乎是 ckeditor 中长期存在的错误,请参阅 this bug report from 2y agothis discussion
【解决方案2】:

当我写 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

【讨论】:

    猜你喜欢
    • 2020-11-30
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多