如何让用户类型只允许 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
}
}
}
这应该可以解决您的问题
目前,我的输入收到的输入格式如下 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
}
}
}
这应该可以解决您的问题