检测NSString中的电话号码

时间:2011-06-08 04:37:45

标签: iphone nspredicate

我想从NSString中提取电话号码。

例如:在字符串致电John @ 994-456-9966 中,我想提取 994-456-9966

我尝试过像

这样的代码
NSString *nameRegex =@"(\(\d{3}\)\s?)?\d{3}[-\s\.]\d{4}"; 
NSPredicate *nameTest = [NSPredicate predicateWithFormat:@"ANY keywords.name CONTAINS[c] %@",nameRegex]; 
validationResult=[nameTest evaluateWithObject:phoneNo]; 

但我无法得到确切的结果。谁能帮我?提前谢谢。

5 个答案:

答案 0 :(得分:5)

这就是你要找的东西,我想:

NSString *myString = @"John @ 123-456-7890";
NSString *myRegex = @"\\d{3}-\\d{3}-\\d{4}";
NSRange range = [myString rangeOfString:myRegex options:NSRegularExpressionSearch];

NSString *phoneNumber = nil;
if (range.location != NSNotFound) {
    phoneNumber = [myString substringWithRange:range];
    NSLog(@"%@", phoneNumber);
} else {
    NSLog(@"No phone number found");
}

您可以依赖Cocoa内置的默认正则表达式搜索机制。这样,您就可以提取与电话号码相对应的范围(如果有)。

请记住,在创建正则表达式时,请始终执行双向转义反斜杠。

根据您要提取的电话号码部分调整您的正则表达式。

修改

Cocoa提供了处理正则表达式的非常简单的工具。对于更复杂的需求,您应该查看Cocoa项目的强大RegexKitLite扩展。

答案 1 :(得分:4)

您可以查看iOS 4.0中的官方NSDataDetector

phoneLinkDetector = [[NSDataDetector alloc] initWithTypes:
          (NSTextCheckingTypeLink | NSTextCheckingTypePhoneNumber) error:nil];


NSUInteger numberOfPhoneLink = [[self phoneLinkDetector] numberOfMatchesInString:tweet
                          options:0  range:NSMakeRange(0, tweet.length)];

答案 2 :(得分:2)

NSString * number = @"(555) 555-555 Office";
NSString * strippedNumber = [number stringByReplacingOccurrencesOfString:@"[^0-9]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [number length])];
  

结果:555555555

答案 3 :(得分:0)

假设你正在" @"所有电话号码中的符号。

NSString *list = @"Call John @ 994-456-9966";
NSArray *listItems = [list componentsSeparatedByString:@"@"] 

您可以使用NSScanner提取电话号码。

编辑:看到评论后。
假设您的手机号码只有12个字符。

length=get the total length of the string.
index=length-12;

NSString *str=[myString substringFromIndex:index];

答案 4 :(得分:0)

如果您只需要数字,则可以过滤掉特殊字符并使用nsscanner

NSString *numberString = @"Call John @ 994-456-9966";
NSString *filteredString=[numberString stringByReplacingOccurrencesOfString:@"-" withString:@""];
NSScanner *aScanner = [NSScanner scannerWithString:filteredString];
[aScanner scanInteger:anInteger];