Определить номер телефона в NSString

Я хочу извлечь номер телефона из 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 ответов

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

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 предоставляет действительно простые инструменты для обработки регулярных выражений. Для более сложных потребностей вы должны посмотреть мощное расширение RegexKitLite для проектов Cocoa.


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

phoneLinkDetector = [[NSDataDetector alloc] initWithTypes:
 (NSTextCheckingTypeLink | NSTextCheckingTypePhoneNumber) error:nil];
********** numberOfPhoneLink = [[self phoneLinkDetector] numberOfMatchesInString:tweet
 options:0 range:NSMakeRange(0, tweet.length)];


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

Результат: 555555555


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

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

или

Вы можете использовать NSScanner для извлечения номера телефона.

EDIT: после просмотра комментариев. Предположим, что у вас в вашем мобильном телефоне всего 12 символов.

length=get the total length of the string.
index=length-12;
NSString *str=[myString substringFromIndex:index];


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

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

licensed under cc by-sa 3.0 with attribution.