У меня есть текстовое поле для ввода канадского почтового индекса. И я использую следующий код, чтобы убедиться, что форматирование правильное, или чтобы показать предупреждение о неправильном форматировании. Это работает без проблем на saveBtnClick
; но я не могу ввести это поле, поскольку оно продолжает возвращать false
в текстовое поле из-за функции validZipCode
. Мне также нужно убедиться, что максимальная длина символов для этого поля не превышает 7 символов, чтобы пользователь не мог ввести больше, чем семь персонажей. Я вижу много решений только для установки максимальной длины; но не могу понять, как это сделать с существующим условием, которое я упомянул здесь для проверки почтового индекса. Вот мой текущий код:
@IBOutlet weak var postalCodeTextField: UITextField!
override func viewDidLoad() {
phoneNumberTextField.delegate = self
postalCodeTextField.delegate = self
}
func validZipCode(postalCode:String)->String{
let postalcodeRegex = "^[a-zA-Z][0-9][a-zA-Z][- ]*[0-9][a-zA-Z][0-9]$"
let pinPredicate = NSPredicate(format: "SELF MATCHES %@", postalcodeRegex)
let bool = pinPredicate.evaluate(with: postalCode) as Bool
return bool.description
}
@IBAction func saveBtnClicked(_ sender: Any) {
let isPostalCodeValid = validZipCode(postalCode: postalCodeTextField.text ?? "")
if isPostalCodeValid == "false" {
simpleAlert(title: "Error!", msg: "Please enter a valid CA postal code")
} else
if isPostalCodeValid == "true" {
//the postalCaode is correct formatting
}
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
guard let text = textField.text else { return false }
let newString = (text as NSString).replacingCharacters(in: range, with: string)
if textField == phoneNumberTextField {
textField.text = formattedNumber(number: newString)
} else
if textField == postalCodeTextField {
textField.text = validZipCode(postalCode: newString)
}
return false
}