Проверьте, использует ли введенный текст только английские буквы - PullRequest
1 голос
/ 06 января 2010

Я работаю над приложением для iPhone и должен убедиться, что введенный текст состоит только из цифр от a до z.

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

РЕДАКТИРОВАТЬ: Я новичок в этом RegEx, поэтому, если вы, пожалуйста, дайте мне код или ссылку, я буду очень благодарен.

Ответы [ 4 ]

9 голосов
/ 06 января 2010

Используйте регулярное выражение, например [0-9a-zA-Z]+. Проверьте RegexKit Framework для Objective C, библиотеки регулярных выражений, которая работает на iPhone.

Затем вы можете сделать что-то вроде:

NSString *str = @"abc0129yourcontent";
BOOL isMatch = [str isMatchedByRegex:@"^[0-9a-zA-Z]+$"];
3 голосов
/ 06 января 2010

Еще один подход (может быть не такой элегантный, как с RegEx):

    NSCharacterSet* tSet = [NSCharacterSet characterSetWithCharactersInString:
               @"abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"];
    NSCharacterSet* invSet = [tSet invertedSet];
    NSString* legalS = @"abcdA1";
    NSString* illegalS = @"asvéq1";

    if ([legalS rangeOfCharacterFromSet:invSet].location != NSNotFound)
        NSLog(legalS); // not printed

    if ([illegalS rangeOfCharacterFromSet:invSet].location != NSNotFound)
        NSLog(illegalS); // printed
2 голосов
/ 06 января 2010

Самый простой способ - при условии, что вы также хотите разрешить пунктуацию, это проверить, что все символы находятся между значениями ascii 32 (пробел) и 126 (~). Таблица ASCII иллюстрирует точку.

Все акцентированные символы - это то, что мы привыкли называть «высокой» ascii, когда я впервые начал программировать.

Если вы не хотите разрешить пунктуацию, вам придется выполнить несколько проверок диапазона:

48 до 57 для номеров

65 до 90 в верхнем регистре

97 до 122 для строчных букв

, что может сделать подход RegEx более читабельным (я не могу поверить, что я только что написал это)

0 голосов
/ 29 июля 2016

Простая реализация (взять сверху, отредактировано только для быстрого копирования-вставки):

Objective-C:

BOOL onlyEnglishAlphanumerical = ([self.textField.text rangeOfCharacterFromSet:[[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"] invertedSet]].location == NSNotFound);
self.textField.layer.borderWidth = (onlyEnglishAlphanumerical) ? 0 : 1;
if (onlyEnglishAlphanumerical)
{
    //Do the deal
}

Swift:

if (self.textField.text.rangeOfCharacterFromSet(NSCharacterSet.init(charactersInString:"abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ").invertedSet) == nil)
{
    //Do the deal
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...