Проверьте NSString для специальных символов - PullRequest
32 голосов
/ 19 февраля 2010

Я хочу проверить строку NSSt на наличие специальных символов, то есть всего, кроме az, AZ и 0-9.

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

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

Кроме того, письма с акцентами, диакритическими знаками и т. Д. Не допускаются.

Как мне поступить?

Спасибо!

Майкл

Ответы [ 5 ]

109 голосов
/ 19 февраля 2010
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");
}
8 голосов
/ 08 февраля 2013

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

NSString *string = <your string>;

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

if ([string.lowercaseString rangeOfCharacterFromSet:specialCharacterSet].length) {                
    NSLog(@"contains special characters");
}
6 голосов
/ 19 февраля 2010

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

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

4 голосов
/ 16 сентября 2013

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

#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;
}
2 голосов
/ 01 ноября 2014

Этот код разрешает вводить только цифры в UITextField.

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

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

}
...