如何在Objective-C中对textField进行验证

6
我想要防止用户未输入任何数据或仅输入空格。基本上必须至少有一个字符而不是空格。然后,我还希望删除单词开头的任何空格,以便第一个字母是不是空格。
编辑:用户必须输入一些内容,如果用户在输入之前输入了几个空格,则要修剪这些空格。我还想防止用户仅输入空格。
例如,如果用户输入名字和姓氏如“James Dean”,我想将第一个空格去掉,但不想去掉“James”和“Dean”之间的第二个空格。

1
[str stringByTrimmingCharactersInSet:<#(NSCharacterSet *)#>] [str stringByTrimmingCharactersInSet:<#(NSCharacterSet *)#>] - Anoop Vaidya
1
有关编程的内容,请转到正则表达式以获取更多信息。 - Anoop Vaidya
1
你想要什么?你想输入一个字符串,但第一个字母不是空格,对吗? - Balu
尝试使用我的代码,它不会接受第一个字母作为空格,但在第一个字母之后,它将接受空格。 - Balu
我想要之后进行修剪。 - user1898829
显示剩余2条评论
5个回答

15

将你的 UIViewController 设为你目标 UITextFielddelegate 并实现这个方法:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

  // verify the text field you wanna validate
  if (textField == _nameTextField) {

    // do not allow the first character to be space | do not allow more than one space
    if ([string isEqualToString:@" "]) {
      if (!textField.text.length)
        return NO;
      if ([[textField.text stringByReplacingCharactersInRange:range withString:string] rangeOfString:@"  "].length)
        return NO;
    }

    // allow backspace
    if ([textField.text stringByReplacingCharactersInRange:range withString:string].length < textField.text.length) {
      return YES;
    }

    // in case you need to limit the max number of characters
    if ([textField.text stringByReplacingCharactersInRange:range withString:string].length > 30) {
      return NO;
    }

    // limit the input to only the stuff in this character set, so no emoji or cirylic or any other insane characters
    NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "];

    if ([string rangeOfCharacterFromSet:set].location == NSNotFound) {
      return NO;
    }

  }

  return YES;
}

太棒了!非常感谢 :) - Mohsin Khubaib Ahmed
太棒了!救了我的一天!(Y) - Manann Sseth
注意:characterSetWithCharactersInString示例不包括除英语以外的其他语言中使用的字母。例如,如果您有欧洲用户,则他们可能输入带有变音标记的字母。在英语环境之外拒绝这些字母可能是不可接受的。作为最低要求,用“普通”版本(没有标记的字母)替换此类字母。虽然这并不是真正可接受的,但比丢弃该字母要好得多。 - ToolmakerSteve

5

你可以试着像这样,也许对你有帮助,这是我的代码:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range 

    replacementString:(NSString *)string{
        if([text.text length]==0){
        if([string isEqualToString:@" "]){
            return NO;
        }
        }
        return YES;
    }

通过使用这段代码,用户将无法输入空格作为第一个字符,但可以在字符串中间插入空格。

1

我会给你第一部分的提示。

NSString *tempname1 = [self.textField.text stringByReplacingOccurrencesOfString:@" " withString:@""];

BOOL thereAreJustSpaces = [tempname1 isEqualToString:@""];

谢谢,我已经让它工作了,现在只需要删除单词开头的空格即可。 - user1898829

1
-(void)removeSpacesFromTextFields:(id) sender {
    NSString *trim = [self.FNTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    if ([trim length] == 0) {
      self.FNTextField.text = @"";
    }
}

我认为这会对你有所帮助。 - Marking

0

如果你想防止文本框中输入空格,请尝试这个方法。

- (void)viewDidLoad
{
 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(checkSpace:) name:UITextFieldTextDidChangeNotification  object:textfield];

}
 -(void)checkSpace:(NSNotification *)notification
{

  str = [textfield.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] ;
 textfield.text=str;
}

这显然不允许添加任何空格。 - Eugene
这接近我想要做的。但如果用户输入像“James Dean”这样的名字和姓氏,我想将第一个空格去掉,但不去掉James和Dean之间的第二个空格。 - user1898829
你可以使用以下代码:[txtUserName.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]来实现。 - Kalpesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接