Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS中的Regex将文本字段限制为仅包含字母和单个撇号_Ios_Regex_Nsregularexpression - Fatal编程技术网

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

iOS中的Regex将文本字段限制为仅包含字母和单个撇号,ios,regex,nsregularexpression,Ios,Regex,Nsregularexpression,返回文本字段后,我想检查提供的文本是否有效。“有效”仅表示名称的字母或单个撇号 我对正则表达式很陌生。是否有一个简单的正则表达式可以用于此检查,或者有人可以告诉我一些阅读材料,在这些材料中,我可以学习编写一个符合我需要的正则表达式?您可以使用该函数检查是否应插入输入并限制其中的字符。由于您的限制相当简单,因此不需要正则表达式,您可以使用字符集 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRa

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


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

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

-(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;
}
regx应该是

abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvxyz'

你可以用

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

分享一些具体的例子,以便有一个清晰的想法…哪一部分需要澄清?一段代码片段不适合这个问题,因为除了我要问的那一点之外,其他的都是无关紧要的。如果是撇号位,那么一个可接受条目的示例将是O'Dowed,但不可接受条目将是O'Dowed。我不想检查每个字符,我想在完成后检查整个字符串。有什么区别?插入时检查单个字符更安全,而不是在编辑模式结束时检查,通常是这样做的。我同意这样会更好,但这不是我的决定。正如我在上面评论的一样,我不想检查每个字符,我想在完成后检查整个字符串。