Некоторые из моих строк NSS являются буквенно-цифровыми. Как мне узнать, какие из них содержат числа, а какие нет? - PullRequest
3 голосов
/ 29 сентября 2011
NSString *test = @"example";

NSString *test2 = @"ex12am243ple";

Есть ли какой-нибудь простой способ определить, какая строка содержит число (0-9), а какая нет?

Спасибо.

Ответы [ 4 ]

6 голосов
/ 29 сентября 2011
if([testString rangeOfCharacterFromSet:characterSetOfNumbers].location == NSNotFound)
{
//there are no numbers in this string
}
else
{
//there is at least 1 number in this string
}

ps вы можете посмотреть документы NSCharacterSet для доступных, но вы, вероятно, захотите это decimalDigitCharacterSet, поэтому вы бы использовали [NSCharacterSet decimalDigitCharacterSet] вместо "characterSetOfNumbers" в приведенном выше коде.

1 голос
/ 29 сентября 2011

Просто добавьте к коду Джесси, определенно легче поместить его в категорию.

@interface NSString (Numeric)
- (BOOL) isNumeric;
@end

@implementation NSString (numeric)
- (BOOL) isNumeric {
    NSCharacterSet *numbers = [NSCharacterSet decimalDigitCharacterSet];
    return ([self rangeOfCharactersFromSet:numbers].location == NSNotFound ? YES : NO);
}
@end 
1 голос
/ 29 сентября 2011
if ([test isMatchedByRegEx:@"\d+"]) {
   // string contains numbers
}

РЕДАКТИРОВАТЬ: также стоит отметить, что вам нужно импортировать regex.h

0 голосов
/ 29 сентября 2011

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

- (BOOL)stringContainsNumbers:(NSString *)string {
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[0-9]" options:0 error:NULL];
    NSUInteger numberOfMatches = [regex numberOfMatchesInString:string options:0 range:NSMakeRange(0, [string length])];
    return  numberOfMatches > 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...