检测NSString中的电话号码

Kin*_*iss 4 iphone nspredicate

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

例如:在字符串Call 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]; 
Run Code Online (Sandbox Code Playgroud)

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

mar*_*wer 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");
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

编辑

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