Подтвердить что ты не робот

Проверьте NSString для специальных символов

Я хочу проверить NSString для специальных символов, то есть ничего, кроме a-z, A-Z и 0-9.

Мне не нужно проверять, сколько специальных символов присутствует или их позиции, мне просто нужно знать, содержит ли какая-либо конкретная строка какие-либо или нет. Если да, то я хочу показать "Ошибка!" Или что-то подобное.

Например, jHfd9982 в порядке, но asdJh992 @ нет.

Также нельзя допускать буквы с акцентами, диакритикой и т.д.

Как я могу это сделать?

Спасибо!

Майкл

4b9b3361

Ответ 1

NSCharacterSet * set = [[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ0123456789"] invertedSet];

if ([aString rangeOfCharacterFromSet:set].location != NSNotFound) {
  NSLog(@"This string contains illegal characters");
}

Вы также можете использовать регулярное выражение (этот синтаксис из RegexKitLite: http://regexkit.sourceforge.net):

if ([aString isMatchedByRegex:@"[^a-zA-Z0-9]"]) {
  NSLog(@"This string contains illegal characters");
}

Ответ 2

Вы хотите найти NSString с помощью набора символов, если он не может найти никаких символов в строке, тогда rangeOfCharacterFromSet: вернет диапазон из {NSNotFound, 0}

Набор символов будет подобен [NSCharacterSet symbolCharacterSet] или вашему собственному набору. Обратите внимание, что вы также можете инвертировать наборы символов, чтобы вы могли иметь набор допустимых символов

Ответ 3

Здесь код, который вы можете использовать для проверки строки, имеет какой-либо специальный символ или нет

NSString *string = <your string>;

NSString *specialCharacterString = @"!~`@#$%^&*-+();:={}[],.<>?\\/\"\'";
NSCharacterSet *specialCharacterSet = [NSCharacterSet
                                       characterSetWithCharactersInString:specialCharacterString];

if ([string.lowercaseString rangeOfCharacterFromSet:specialCharacterSet].length) {                
    NSLog(@"contains special characters");
}

Ответ 4

Если вы хотите удалить специальные символы и цифры из любой строки (даже текстового поля), при редактировании эти строки ниже очень удобны:

#define ACCEPTABLE_CHARACTERS @"!~`@#$%^&*-+();:=_{}[],.<>?\\/|\"\'0123456789"

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    NSCharacterSet *cs = [NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS];

    NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];

    return (![string isEqualToString:filtered]) ? NO : YES;
}

Ответ 5

Этот код позволяет вводить только числа в UITextField.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    if ([string rangeOfCharacterFromSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]].location != NSNotFound)
        return NO;
    else
        return YES;

}