Проверьте, используются ли во введенном тексте только английские буквы
-
19-09-2019 - |
Вопрос
Я работаю над приложением для iPhone, и мне нужно убедиться, что введенный текст состоит только из букв от а до я и цифр.
Я не хочу, чтобы пользователь использовал буквы других языков, например, с ударениями или точками над ними.
Редактировать:Я новичок в этом регулярном выражении, поэтому, если вы, пожалуйста, дадите мне код или ссылку, я буду очень благодарен.
Решение
Используйте регулярное выражение, например [0-9a-zA-Z]+
.Ознакомьтесь с Фреймворк RegexKit для Objective C - библиотека регулярных выражений, которая работает на iPhone.
Затем вы можете сделать что-то вроде:
NSString *str = @"abc0129yourcontent";
BOOL isMatch = [str isMatchedByRegex:@"^[0-9a-zA-Z]+$"];
Другие советы
Еще один подход (может быть, не такой элегантный, как с регулярным выражением):
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
Самый простой способ - предполагая, что вы также хотите разрешить пунктуацию, - это проверить, что все символы находятся между значениями ascii 32 (пробел) и 126 (~).В Таблица ASCII иллюстрирует суть дела.
Все символы с ударением - это то, что мы привыкли называть "высоким" ascii, когда я только начал программировать.
Если вы не хотите разрешать пунктуацию, вам придется выполнить несколько проверок диапазона:
от 48 до 57 для чисел
от 65 до 90 для верхнего регистра
от 97 до 122 для нижнего регистра
что могло бы сделать подход с регулярными выражениями более читабельным (Я не могу поверить, что я только что написал это)
Простая реализация (взято сверху, отредактировано только для быстрого копирования-вставки):
Цель-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
}
Быстрый:
if (self.textField.text.rangeOfCharacterFromSet(NSCharacterSet.init(charactersInString:"abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ").invertedSet) == nil)
{
//Do the deal
}