Проверьте, используются ли во введенном тексте только английские буквы

StackOverflow https://stackoverflow.com/questions/2013288

  •  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
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top