如何知道iOS中的UITextField是否有空格

我有一个UITextField,用户可以input名称并保存。 但是,用户不应该被允许在textFiled中input空格。

1 – 如何查找用户是否在textFiled中input了两个空格或完整的空格

2 – 我怎么知道,如果textFiled填充只有空格

编辑 – 只input空格(空格)是无效的

你可以“修剪”文本,即删除开始和结束的所有空白。 如果剩下的只是一个空string,那么只input空格(或空白)。

 NSString *rawString = [textField text]; NSCharacterSet *whitespace = [NSCharacterSet whitespaceAndNewlineCharacterSet]; NSString *trimmed = [rawString stringByTrimmingCharactersInSet:whitespace]; if ([trimmed length] == 0) { // Text was empty or only whitespace. } 

如果你想检查是否有空白(文本中的任何地方),你可以这样做:

 NSRange range = [rawString rangeOfCharacterFromSet:whitespace]; if (range.location != NSNotFound) { // There is whitespace. } 

如果您想防止用户input空白,请参阅@ Hanon的解决scheme。

如果你真的想'限制'用户进入空格

你可以在UITextFieldDelegate中实现下面的方法

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSString *resultingString = [textField.text stringByReplacingCharactersInRange: range withString: string]; NSCharacterSet *whitespaceSet = [NSCharacterSet whitespaceCharacterSet]; if ([resultingString rangeOfCharacterFromSet:whitespaceSet].location == NSNotFound) { return YES; } else { return NO; } } 

如果用户在字段中input空格,则当前文本中没有更改

使用下面的代码行

 NSString *str_test = @"Example "; NSCharacterSet *whitespaceSet = [NSCharacterSet whitespaceCharacterSet]; if([str_test rangeOfCharacterFromSet:whitespaceSet].location!=NSNotFound) { NSLog(@"Found"); } 

如果你想限制用户使用下面的代码

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if([string isEqualToString:@" "]) { return NO } else { return YES } } 

UPD: Swift 2.0支持

 func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { let whitespaceSet = NSCharacterSet.whitespaceCharacterSet() let range = string.rangeOfCharacterFromSet(whitespaceSet) if let _ = range { return false } else { return true } } 

我有一个不允许用户input空白字段的相同条件

这是我的代码和检查语句

 - (IBAction)acceptButtonClicked:(UIButton *)sender { if ([self textFieldBlankorNot:fullNametext]) { fullNametext.text=@"na"; } // saving value to dictionary and sending to server } -(BOOL)textFieldBlankorNot:(UITextField *)textfield{ NSString *rawString = [textfield text]; NSCharacterSet *whitespace = [NSCharacterSet whitespaceAndNewlineCharacterSet]; NSString *trimmed = [rawString stringByTrimmingCharactersInSet:whitespace]; if ([trimmed length] == 0) return YES; else return NO; } 

Heres Swift 3版本

 let whitespaceSet = NSCharacterSet.whitespaces let range = string.rangeOfCharacter(from: whitespaceSet) if let _ = range { return false } else { return true } 

这是我使用stringByReplacingOccurrencesOfString

 - (BOOL)validateFields { NSString *temp = [textField.text stringByReplacingOccurrencesOfString:@" " withString:@"" options:NSLiteralSearch range:NSMakeRange(0, textField.text.length)]; if ([temp length] == 0) { // Alert view with message @"Please enter something." return NO; } } 

@ Hanon的回答是非常整齐的,但我需要的是至less允许1个空格,所以基于Hanon的解决scheme,我做了这个:

我声明了一个名为whitespaceCount的局部variables来保留空格的计数。 希望这有助于任何人!

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSCharacterSet *whitespaceSet = [NSCharacterSet whitespaceCharacterSet]; if ([string rangeOfCharacterFromSet:whitespaceSet].location != NSNotFound) { whitespaceCount++; if (whitespaceCount > 1) { return NO; } } else { whitespaceCount = 0; return YES; } }