iOS Copy Вставить телефон из контактов в UITextField добавляет странные символы Unicode
Упрощенный сценарий следующий.
- Новый проект с использованием шаблона приложения Single View.
- Добавьте UITextField в ViewController.
- Запустите приложение и скопируйте и вставьте контактный номер телефона [ej. John Appleseed one
(888) 555-5512)
] в UITextField.
Номер будет добавлен с символом Unicode в начале и в конце, получив как \u{e2}(888) 555-5512\u{e2}
при изучении переменной во время отладки.
Это действительно странно и, на мой взгляд, не предполагаемое поведение. Это ошибка или что-то, что работает намеренно таким образом?
Код:
Здесь ничего сложного. Как описано выше, новый проект, добавьте UITextField, кнопку добавления, и если кнопка запускает печать результата. В принтере будет отображаться телефон просто отлично, просто поместите контрольную точку в линию print
и посмотрите значение телефона var, чтобы увидеть, что я имею в виду.
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var phoneLabel: UITextField!
@IBAction func goButton(_ sender: UIButton) {
let text = phoneLabel.text ?? ""
print(text)
}
}
Протестировано:
- iOS 11.1 - iPhone X
- Xcode 9.1
Шаги с изображениями:
Это то, что я получил на линии точки останова.
Ответы
Ответ 1
Недавно у меня была такая же проблема. Довольно интересно то, что вы видите в отладчике, к сожалению, не то, что действительно вставлено. Если вы скопируете номер в другое место и исследуете его с помощью консоли, например, вы получите следующий результат:
>>> 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'
Таким образом, вы можете видеть, что на самом деле два разных невидимых персонажа контролируют поток текста.
Чтобы решить это, я отфильтровал все символы cF
категории cF
Таким образом, вы можете сделать:
phoneLabel.text?.replacingOccurrences(of: "\\p{Cf}", with: "", options: .regularExpression)