【问题标题】:How to remove zero-width space characters ‍ from the text如何从文本中删除零宽度空格字符‍
【发布时间】:2018-06-01 16:56:20
【问题描述】:

我的文本包含 ‍ Zero width joiner 在 UI 中不可见,但是当我将其作为短信发送时,它在 iPhone 中显示为 ? 问号。

我曾尝试使用 gsub 删除它,但它没有被删除。

text.gsub("&zwj\;", "")

有没有办法从文本中删除这种不可见的字符?


更新:

除了@matt 的回答

Unicode 具有以下零宽度字符:

  • U+200B 零宽度空间
  • U+200C 零宽度非连接 Unicode 代码点
  • U+200D 零宽度连接符 Unicode 代码点
  • U+FEFF 零宽度不间断空格 Unicode 代码点

要在文本中替换它们,您可以使用简单的正则表达式:

text = text.gsub(/[\u200B-\u200D\uFEFF]/, '')

【问题讨论】:

  • \ 是干什么用的?只需使用"‍"
  • @Phlip ` is use to escaping special characters. Removing ` 也不起作用。
  • 运行 p textputs text.inspect,然后编辑您的帖子并添加结果。 ‍! 内可能还有更多有趣的事情,例如零宽度的连接符!
  • 您的字符串不包含任何特殊字符。请编辑并使用复制/粘贴插入包含特殊字符的字符串。

标签: ruby string ruby-on-rails-4


【解决方案1】:

字符串‍ 是零宽度连接符的HTML 字符实体。当网络浏览器看到它时,它会用一个实际的零宽度连接符替换它,但就 Ruby 而言,它只是一个 5 个字符的字符串。

您要做的是指定 实际 零宽度连接符。它有代码点 U+200D,所以你可以像这样使用它,使用 Ruby 的 Unicode 转义:

text.gsub("\u200D", "")

这应该删除零宽度的连接字符,而不是寻找原始代码正在执行的字符串‍

【讨论】:

    【解决方案2】:
    "blah blah blah".gsub(/[^[:print:]]/, '')
    

    应该删除所有不可打印的字符。

    【讨论】:

    • 感谢您检查@Kris 但这也删除了换行符。
    • "\u200B"(零宽度空间)匹配 /[[:print:]]/
    猜你喜欢
    • 2012-07-03
    • 2018-02-19
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    • 2013-12-19
    • 2016-04-09
    • 2014-02-12
    相关资源
    最近更新 更多