2017-06-07 8 views
2

テキストのみを確認するtextFieldを確認したい&空白が許されています。数字が指定されていれば警告エラーが返されます。UITextField Swiftで許可されているアルファベットと空白のみ

//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. 

このコードはアルファベットのみで動作しますが、今必要なのはアルファベットと空白です。私が宣言したものは、私が推測するようなハードコードでした。たぶんあなたはこのケースのためのより良いコードとオプションを持っています。

ありがとうございます。することができます含まれる文字セット」「

の末尾に空白文字を追加するのではなく、あなたをハードコーディング

+0

どの "アルファベット"? "è"、 "Ä"、 "œ"も許されていますか?他の言語(ギリシャ語、アラビア語、中国語、ヘブライ語...)はどうですか?あらかじめ定義された文字セット(https://developer.apple.com/documentation/foundation/characterset)を見ましたか? –

+0

a-z(上下限)のアルファベットのみ@MartinR – StevenTan

答えて

2

let set = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ ") 

すなわちのように文字セットに新しい行を追加することであろう最も簡単な方法は、

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 { 

} 
+0

このトリックが動作しますが、コードはハードコードのように見えますが、これを宣言する方法は他にありますか? – StevenTan

+0

上記の答えを編集し、ハードコーディング以外の標準的な方法を追加しました。動作しているかどうかを確認して確認してください。 –

+0

regex.firstMatch(文字列、オプション:[]、範囲:NSMakeRange(0、nameValue.characters.count))!= nil { ' – StevenTan

0

使用正規表現のような正規表現を使用します。

let regex = try! NSRegularExpression(pattern: "[a-zA-Z\\s]+", options: []) 

あなたはこのようにそれを一致させることができます。

let range = regex.rangeOfFirstMatch(in: string, options: [], range: NSRange(location: 0, length: string.characters.count)) 
return range.length == string.characters.count 
関連する問題