Проверьте NSString для специальных символов
Я хочу проверить NSString для специальных символов, то есть ничего, кроме a-z, A-Z и 0-9.
Мне не нужно проверять, сколько специальных символов присутствует или их позиции, мне просто нужно знать, содержит ли какая-либо конкретная строка какие-либо или нет. Если да, то я хочу показать "Ошибка!" Или что-то подобное.
Например, jHfd9982 в порядке, но asdJh992 @ нет.
Также нельзя допускать буквы с акцентами, диакритикой и т.д.
Как я могу это сделать?
Спасибо!
Майкл
Ответы
Ответ 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;
}