如何让用户类型只允许 UITextfield 中的字符?

How to let user type only allow charaters in UITextfield?

目前,我的输入收到的输入格式如下 CCXXXXXXXXXX(C = 字符,X = 数字)。

我想让用户只能按照格式输入

例子

用户输入 文本字段的结果
AA1234 AA1234
A2 一个
AAA AA
AA12345A AA12345

我的意思是如果用户类型不符合格式,字符将不会在文本字段中输入

我做了一个正则表达式。

我认为"[A-Z]{0,1}+[A-Z]{0,1}+[0-9]*"是您想要的格式。每次在文本字段中输入一个字母时,它都会检查格式。

如果不符合格式,信件将被删除。
所以好像没有输入


@IBOutlet weak var inputTextField: UITextField!

override func viewDidLoad() {
  inputTextField.addTarget(self, action: #selector(self.textFieldDidChange(_:)), for: .editingChanged)
}

func checkFormat(text: String?) -> Bool {
  guard text != nil else { return false }

 let textRegEx = "[A-Z]{0,1}+[A-Z]{0,1}+[0-9]*"
  let pred = NSPredicate(format:"SELF MATCHES %@", textRegEx)
  return pred.evaluate(with: text)
}

@objc func textFieldDidChange(_ textField: UITextField) {
  if !checkFormat(text: textField.text) {
    textField.deleteBackward()
  }
}

您可以为您的文本字段设置委托

class SampleViewController: UIViewController {

    @IBOutlet weak var myTextfield: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        myTextfield.delegate = self
    }
}

然后检查键入的字符并验证哪些字符应该被允许或不允许。

extension SampleViewController: UITextFieldDelegate {

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    
        // Check for backspace
        if let char = string.cString(using: String.Encoding.utf8) {
            let isBackSpace = strcmp(char, "\b")
            if (isBackSpace == -92) {
                return true
            }
        }
    
        if( range.location < 2 ) {
            return Character(string).isLetter ? true : false
        } else {
            return Character(string).isNumber ? true : false
        }
    }
}

这应该可以解决您的问题