正常表达美国电话号码无效

时间:2012-05-19 06:45:56

标签: iphone objective-c regex nsregularexpression

这类问题在SO上被问了这么多次,但我的表达方面有问题,而且对我不起作用。

我只需要允许数字,(,), - 在电话号码中,我的代码如下所示。 但只有未注释的表达式才有效,只有数字没有(,), - 允许,我搜索并获得应该允许(,)的其他表达式,但这些也不起作用。

可能有什么不对? 示例:9876545678, (123) 123-7657

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {
        if ([string isEqualToString:@""]) {
            return TRUE;
        }
        if(textField == aTfdPhone)
        {
            if ([string isEqualToString:@"."]) {
                    return NO;
                 }
             NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];

             NSString *expression = @"^([0-9]+)?(\\.([0-9])?)?$";
    //       NSString *expression = @"^[(]?[2-9][0-9]{2}[)]?[ -]?[0-9]{3}[ -]?[0-9]{4}$";
       //      NSString * const expression = @"^([+-]{1})([0-9]{3})$";
             NSError *error = nil;

             NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression 
                                                         options:NSRegularExpressionCaseInsensitive 
                                                         error:&error];
            if (error) {
                NSLog(@"error %@", error);
            }
            NSUInteger numberOfMatches = [regex numberOfMatchesInString:newString
                                                       options:0
                                                    range:NSMakeRange(0, [newString length])];
            if (numberOfMatches == 0){
                    return NO;
             }
        }
        return TRUE; 
    }

1 个答案:

答案 0 :(得分:1)

由于第一个数字,您的第二次尝试无法识别(123) 123-7657

应该是

   NSString *expression = @"^[(]?[1-9][0-9]{2}[)]?[ -]?[0-9]{3}[ -]?[0-9]{4}$";

   NSString *expression = @"^[(]?[2-9][0-9]{2}[)]?[ -]?[0-9]{3}[ -]?[0-9]{4}$";

唯一的区别是匹配第一个数字[2-9]的运算符与1不匹配。