iOS 中的正则表达式将文本字段限制为仅字母和单撇号

Regex in iOS to limit a text field to only letters and single apostrophies

返回文本字段后,我想检查提供的文本是否有效。对于名称,有效意味着只有字母或一个撇号。

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

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

-(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;
}

正则表达式应该是

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'

你可以使用

-(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];
        }
    }

你可以这样做,但是你需要在输入无效的情况下显示错误。

- (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;
}