我想从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];
但我无法得到确切的结果。谁能帮我?提前谢谢。
答案 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];