从联系人到UITextField的iOS Copy粘贴手机添加了奇怪的unicode字符

Jav*_*diz 13 ios swift

简化的方案如下.

  • 使用Single View App模板的新项目.
  • 将一个UITextField添加到ViewController.
  • 运行该应用程序并复制并粘贴联系人电话号码[ej.John Appleseed一个人(888) 555-5512)到UITextField.

该数字将在开头和结尾添加Unicode字符,就像\u{e2}(888) 555-5512\u{e2}在调试时探索变量一样.

这真的很奇怪,在我看来,不是预期的行为.这是一个错误或某种故意以这种方式工作的东西吗?

码:

这里没什么复杂的.如前所述,全新的项目,添加UITextField,添加Button,如果按钮触发打印结果.打印将显示手机就好了,只需在线上设置断点print并查看手机var的值,看看我的意思.

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var phoneLabel: UITextField!

    @IBAction func goButton(_ sender: UIButton) {

        let text = phoneLabel.text ?? ""
        print(text)
    }
}
Run Code Online (Sandbox Code Playgroud)

测试中:

  • iOS 11.1 - iPhone X.
  • Xcode 9.1

图像步骤:

在此输入图像描述


在此输入图像描述


这就是我在断点线上得到的.

在此输入图像描述

lim*_*ity 19

我最近有同样的问题.有趣的是,您在调试器中看到的内容很遗憾不是实际粘贴的内容.如果您将号码复制到其他位置并使用控制台进行调查,例如,您将获得以下输出:

>>> u"\U+202D(888) 5555-5512\U+202C"
u'\u202d(888) 5555-5512\u202c'
>>> name(u"\U+202D")
'LEFT-TO-RIGHT OVERRIDE'
>>> name(u"\U+202C")
'POP DIRECTIONAL FORMATTING'
Run Code Online (Sandbox Code Playgroud)

所以你可以看到它实际上是控制文本流的两个不同的不可见字符.

为了解决这个问题,我过滤掉了该cF 类别的所有unicode字符.所以你可以这样做:

phoneLabel.text?.replacingOccurrences(of: "\\p{Cf}", with: "", options: .regularExpression)
Run Code Online (Sandbox Code Playgroud)