代码之家  ›  专栏  ›  技术社区  ›  Tiddly

iOS中的Regex将文本字段限制为仅包含字母和单撇号

  •  1
  • Tiddly  · 技术社区  · 11 年前

    返回文本字段后,我想检查提供的文本是否有效。对于名称,“有效”仅表示字母或单个撇号。

    我对正则表达式很陌生。是否有一个简单的正则表达式可以用于此检查,或者有人可以向我指出一些阅读材料,在那里我可以学习编写符合我需要的正则表达式?

    3 回复  |  直到 11 年前
        1
  •  2
  •   entropid    11 年前

    您可以这样做,但如果输入无效,则需要显示错误。

    - (BOOL)textFieldShouldEndEditing:(UITextField *)aTextField
    {
        NSString *const regularExpression = @"^[a-zA-Z']+$";
        NSError *error = NULL;
        NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regularExpression
                                                                               options:kNilOptions
                                                                                 error:&error];
        if (error) {
            // Handle error
        }
    
        NSUInteger numberOfMatches = [regex numberOfMatchesInString:aString
                                                            options:0
                                                              range:NSMakeRange(0, [aString length])];
        return numberOfMatches > 0;
    }
    
        2
  •  0
  •   Arun Kumar    11 年前

    regx应为

    EFGHIJKLMNOPQRSTUVWXYZabcdefghijlmnopqrstuvxyz'

    你可以使用

    -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    
            if (textField == emailid) {
                NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'"] invertedSet];
                NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
                ;
                return [string isEqualToString:filtered];
            }
        }
    
        3
  •  -1
  •   entropid    11 年前

    您可以使用检查是否应插入输入的函数,并限制其中的字符。由于您的限制相当简单,因此不需要正则表达式,您可以使用字符集。

    -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    
        NSMutableCharacterSet *allowedCharacters = [NSMutableCharacterSet alphanumericCharacterSet];
        [allowedCharacters addCharactersInString:@"'"];
    
        if([string rangeOfCharacterFromSet:allowedCharacters.invertedSet].location == NSNotFound){
            return YES;
        }
    
        return NO;
    }