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

时间:2015-02-02 12:57:46

标签: ios regex nsregularexpression

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

我对正则表达式很陌生。有没有一个简单的正则表达式我可以用于此检查,或者有人可以指向我阅读材料,我可以学习构建一个符合我需要的正则表达式吗?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

regx应该是

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