2016-10-18 11 views
0

今、問題が発生しています。私はカスタムをTextFieldに設定しました。ユーザーがボックスに任意の単語を入力すると、データを保存したいが、単語が入力されるたびに条件を設定したい場合は、Stringテキストには1単語しか使用できません。たとえば、ユーザーが "Hello"のようなテキストを入力した場合、条件を満たしているため、保存する必要があります。しかし、「こんにちは、世界」、「こんにちは」、「こんにちは」、「私はスーパーマン」など、テキストの中にスペースがあるテキストのようなものは許されません。スウィフトで文字列にスペースがある場合の入力を取り除く方法

for space in text { 
    if space == " " { 
     print("Enter only one word please") 
     return 
    } 
} 

これを解決しようとしていますが、うまくいきません。私は私の目標を達成するために配列を使用する必要があるのだろうが、私は考えていないのだろうか。スペースがない場合は、ユーザーの入力を許可する必要があります。

ありがとうございます。

+2

からインスピレーションを受け

let phrase = “Your text here“ let whitespace = NSCharacterSet.whitespaceCharacterSet() let range = phrase.rangeOfCharacterFromSet(whitespace) // range will be nil if no whitespace is found if let test = range { print("Enter only one word please") return } 

'(otherstringは:スティング)が含ま'メソッドを。 'text.contains(" ")'のようなものです。文字列に空白が含まれている場合はtrueを返します – Aks

+0

@Aksこんにちは、素晴らしいです!あなたは私のisssuを解決しました!これを行うにはとても簡単でした!ありがとう! – bagels

答えて

2

そこかどうかをチェックするために、この機能を使用しますあなたの文字列内の任意のスペースです:

func validate(string: String) -> Bool { 
    return string.rangeOfCharacter(from: CharacterSet.whitespaces) == nil 
} 

または入力は文字だけが含まれている場合、この1は、チェックする:

func validate(string: String) -> Bool { 
    return string.rangeOfCharacter(from: CharacterSet.letters.inverted) == nil 
} 

実際にそれを使用する方法の例:

class ViewController: UIViewController, UITextFieldDelegate { 
    //... 
    func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool { 
     let currentString: NSString = (textField.text ?? "") as NSString 
     let newString = currentString.replacingCharacters(in: range, with: string) 
     return validate(string: newString) 
    } 
} 
-1

正規表現を使用して、この検証を解決します。

let stringInput = "epninijjk werewr" 

let regEx = "(^[a-zA-Z0-9]{2,30}$)" 

do { 
let reularExpression = try NSRegularExpression(pattern: regEx, options: .CaseInsensitive) 
let reuslt = reularExpression.matchesInString(stringInput, options: [], range: NSRange(location: 0, length: email.characters.count)) 
if reuslt.isEmpty{ 
    print("Not valid") 
} 
else{ 
    print("Valid") 
} 
} 
catch let error { 
    print(error) 
} 

ここで、{2,30} 2が最小文字数であり、30が上限です。

要件に応じて変更することができます。

許可する場合は、[a-zA-Z0-9]に特殊文字を追加します。

+0

私は@Aks答えがかなり簡単で、私の問題を解決するのが簡単だとわかりました。これは今のところとても複雑に見えますが、この問題を理解するのを助けてくれてありがとう! – bagels

1

スペースのみをチェックする場合は、コードがほぼ正しいです。あなたはすべての空白をチェックしたい場合は、これを試して

for space in text.characters { 

:これまで

for space in text { 

:あなただけのこれを変更する必要が

for c in text.characters { 
    let string = String(c) 
    let unicodeScalar = s.unicodeScalars.first! 
    if CharacterSet.whitespacesAndNewlines.contains(unicodeScalar) { 
     // contains whitespace 
    } 
} 
+0

'rangeOfCharacter'メソッドを使って文字をループすることを避けることができます。それは私の場合と同じくらい短くて読みやすい。 – alexburtnik

+0

このアプローチは私には面白いです! text.contains( "")を書くだけで何か違いはありますか? – bagels

+0

@ryoheiはスペースのみをチェックします。すべての空白を確認したい場合は、それを使うことはできません。 – Sweeper

0

私は、これはあなたの問題を解決すると思います。あなたが迅速Stringクラスを使用する必要がありますリンクhere

関連する問題