The simplified scenario is the following.

  • New project using Single View App template.
  • Add a UITextField to the ViewController.
  • Run the app and copy and paste a Contacts phone number [ej. John Appleseed one (888) 555-5512) ] to the UITextField.

The number will be added with a Unicode character at the beginning and at the end, getting like \u{e2}(888) 555-5512\u{e2} when exploring the variable while debugging.

This is really weird and in my opinion, not the intended behaviour. Is this a bug or something that works intentionally this way?

Code:

Nothing complicated here. As described before, brand new project, add UITextField, add Button, and if button triggered print the result. The print will show the phone just fine, just put a breakpoint in the print line and see the value of the phone var to see what I mean.

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var phoneLabel: UITextField!

    @IBAction func goButton(_ sender: UIButton) {

        let text = phoneLabel.text ?? ""
        print(text)
    }
}

Tested in:

  • iOS 11.1 - iPhone X
  • Xcode 9.1

Steps with images:

enter image description here


enter image description here


This is what I got at the breakpoint line.

enter image description here

asked Dec 3, 2017 at 22:04

Javier Cadiz's user avatar

15

I had exactly the same issue recently. Interestingly enough what you see in the debugger is unfortunately not what is actually pasted. If you copy the number to a different place and investigate it with your console for example you will get the following output:

>>> 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'

So as you can see it is really two different invisible characters controlling the flow of the text.

In order to solve that I filtered out all unicode characters of the cF category. So you could do:

phoneLabel.text?.replacingOccurrences(of: "\\p{Cf}", with: "", options: .regularExpression)

answered Dec 15, 2017 at 15:11

limfinity's user avatar

3 Comments

@limfinityThis absolute does the magic. What a weird behaviour. Thanks for answering.

BTW, there is online converters to see unicode codes of chars (including hidden) in string. For example: r12a.github.io/app-conversion

Thank you, we were having the same issue for years with mac users. What an awful thing, almost as evil a the non-breaking space :)

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.