在UITextField Swift中只允许使用Alphabet和空格

Ste*_*Tan 6 swift swift3

我想验证我的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)


Sam*_*ami 8

上述所有解决方案都很好,但仅适用于 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)


Har*_*esh 6

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)


Akb*_*han 5

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)