Определить номер телефона в строке NSString - PullRequest
4 голосов
/ 08 июня 2011

Я хочу извлечь номер телефона из строки NSString.

Например: в строке Позвоните Джону @ 994-456-9966 , я хочу извлечь 994-456-9966 .

IЯ пробовал код, как,

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 ]

5 голосов
/ 08 июня 2011

Это то, что вы ищете, я думаю:

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");
}

Вы можете положиться на стандартный механизм поиска регулярных выражений, встроенный в Какао. Таким образом, вы сможете извлечь диапазон, соответствующий номеру телефона, если таковой имеется.

Помните, что при создании регулярных выражений всегда используйте двойные экранированные косые черты.

Адаптируйте свое регулярное выражение в соответствии с той частью телефонного номера, которую вы хотите извлечь.

Редактировать

Какао предоставляет действительно простые инструменты для обработки регулярных выражений. Для более сложных задач вам следует обратиться к мощному расширению RegexKitLite для проектов Какао.

4 голосов
/ 24 августа 2011

Вы можете проверить официальный NSDataDetector в iOS 4.0

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


NSUInteger numberOfPhoneLink = [[self phoneLinkDetector] numberOfMatchesInString:tweet
                          options:0  range:NSMakeRange(0, tweet.length)];
2 голосов
/ 10 сентября 2014
NSString * number = @"(555) 555-555 Office";
NSString * strippedNumber = [number stringByReplacingOccurrencesOfString:@"[^0-9]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [number length])];

Результат: 555555555

0 голосов
/ 08 июня 2011

если вам нужно только число, вы можете отфильтровать специальные символы и использовать nsscanner

NSString *numberString = @"Call John @ 994-456-9966";
NSString *filteredString=[numberString stringByReplacingOccurrencesOfString:@"-" withString:@""];
NSScanner *aScanner = [NSScanner scannerWithString:filteredString];
[aScanner scanInteger:anInteger];
0 голосов
/ 08 июня 2011

Предположим, что у вас есть символ "@" на всех телефонных номерах.

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];
...