我想验证我的textField只检查字母和空格允许,如果给出了数字,那么它将返回警告错误.
//First I declare my value to variable
var nameValue: String = mainView.nameTextField.text!
//Then I declare this
let set = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ")
//And this is the validation
if(nameValue.rangeOfCharacter(from: set.inverted) != nil ){
self.showAlert(message: "Must not contain Number in Name")
} else {
//other code
}
ex: nameValue : "abcd" it works, but
if nameValue : "ab cd" whitespace included, it returns the showAlert message.
Run Code Online (Sandbox Code Playgroud)
这段代码只适用于字母表,我现在需要的是字母和空格.而且我猜的是硬编码.也许你们这个案例有更好的代码和选项.
谢谢 .
Ara*_*A R 12
最简单的方法是在字符集中添加新行
let set = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ ")
Run Code Online (Sandbox Code Playgroud)
即,在包含的字符集""的末尾添加空白字符
而不是硬编码你可以使用正则表达式
do {
let regex = try NSRegularExpression(pattern: ".*[^A-Za-z ].*", options: [])
if regex.firstMatch(in: nameValue, options: [], range: NSMakeRange(0, nameValue.characters.count)) != nil {
self.showAlert(message: "Must not contain Number in Name")
} else {
}
}
catch {
}
Run Code Online (Sandbox Code Playgroud)
上述所有解决方案都很好,但仅适用于 English Alphabet ([^A-Za-z ])。所以这个解决方案对我不起作用,因为我的应用程序是为多语言支持而开发的。为此,我编写了一个解决方案,该解决方案适用于所有语言。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let allowedCharacter = CharacterSet.letters
let allowedCharacter1 = CharacterSet.whitespaces
let characterSet = CharacterSet(charactersIn: string)
return allowedCharacter.isSuperset(of: characterSet) || allowedCharacter1.isSuperset(of: characterSet)
}
Run Code Online (Sandbox Code Playgroud)
pattern: ".*[^A-Za-z0-9 ].*"它允许输入字符,数字或空格(“”)
pattern: ".*[^A-Za-z ].*"它允许输入字符或空格(“”)
pattern: ".*[^A-Za-z].*"它只允许输入字符
下面的例子
extension [YourViewController]: UITextFieldDelegate
{
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
do {
let regex = try NSRegularExpression(pattern: ".*[^A-Za-z0-9 ].*", options: [])
if regex.firstMatch(in: string, options: [], range: NSMakeRange(0, string.count)) != nil {
return false
}
}
catch {
print("ERROR")
}
return true
}
}
Run Code Online (Sandbox Code Playgroud)
1st 你必须用你自己的类继承 UITextFieldDelegate 类
class ViewController: UIViewController, UITextFieldDelegate {
Run Code Online (Sandbox Code Playgroud)
2 添加一个 IBOutlet
@IBOutlet weak var firstName: UITextField!
Run Code Online (Sandbox Code Playgroud)
第三,你必须确保这个对象正在使用
override func viewDidLoad() {
super.viewDidLoad()
firstName.delegate = self
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if textField == firstName {
let allowedCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
let allowedCharacterSet = CharacterSet(charactersIn: allowedCharacters)
let typedCharacterSet = CharacterSet(charactersIn: string)
let alphabet = allowedCharacterSet.isSuperset(of: typedCharacterSet)
return alphabet
} else {
return false
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10184 次 |
| 最近记录: |