Need to check the following pattern when a user type in textfield of SwiftUI : ABCDE1234F that is first five letters, followed by four numbers and last again a letter. I can check this after editing is complete by using func like given below:
func isValidPAN(_ pan:String)->Bool{
let panRegex = "^[A-Z]{5}[0-9]{4}[A-Z]{1}"
let panTest = NSPredicate(format: "SELF MATCHES %@", panRegex)
return panTest.evaluate(with: pan)
}
In view,
TextField(proEdit.panNo,text: $editData.panNO)
.disableAutocorrection(true)
.autocapitalization(.allCharacters)
.onChange(of: editData.panNO, perform: {
editData.panNO = String($0.prefix(10))
let valid = isValidPAN(editData.panNO)
if valid{
correct.toggle()
}
This is working fine but what I want to do is user can only enter as per the required format that is first a letter, second letter and so on if first char is not letter it should not type like in the given below eg:
TextField(proEdit.beneficiaryName, text:$editData.benefName)
.onChange(of: editData.benefName, perform: {char in
let filterChar =
editData.benefName.filter{$0.isLetter || $0.isWhitespace}
if editData.benefName != filterChar{
editData.benefName = filterChar
}
})
In the above, user can only type letter or whitespace