Я використовую цей код, щоб перевірити, чи містить мій рядок якісь не буквено-цифрові символи:
NSString *initials = @"Å漢";
NSCharacterSet *unwantedCharacters = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
// See if we can find any of the unwanted characters
return [initials rangeOfCharacterFromSet:unwantedCharacters].location == NSNotFound;
Код повертає справжнє. Чому він не в змозі знайти недійсні символи Å і 漢?
Відповіді:
1 для відповіді № 1З документів для alphanumericCharacterSet
:
Неофіційно цей набір - це набір усіх символів, що використовуються як основні одиниці алфавітів, навчальних програм, ідеографів та цифр.
Два написаних вами персонажі є насправдібуквено-цифрові символи. Виходячи з ваших коментарів, ви хочете обмежити це літерами та цифрами ASCII, що є крихітним набором букв і цифр Unicode. Просто робіть:
NSCharacterSet *lettersAndNumbers = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"];
NSCharacterSet *unwantedCharacters = [lettersAndNumbers invertedSet];
-1 для відповіді № 2
NSNotFound визначається як NSIntegerMax, який у 64-бітовій системі буде 9223372036854775807.