Проверка содержимого UITextfield (буквы, цифры и специальные знаки препинания)

У меня есть поле UIText, которое содержит поле имени пользователя, затем я хотел бы добавить проверку, чтобы пользователь не мог ввести имя пользователя, отличное от букв, цифр и «_-». знаки препинания. Я пытаюсь использовать NSCharacterset для этого, но безуспешно.

NSScanner *scanner = [NSScanner scannerWithString:username];

NSCharacterSet *letterCharacterSet = [NSCharacterSet letterCharacterSet];
NSCharacterSet *decimalDigitCharacterSet = [NSCharacterSet decimalDigitCharacterSet];
NSCharacterSet *customPunctuationCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@"_-."];

if (![scanner scanCharactersFromSet:letterCharacterSet intoString:NULL] &&
    ![scanner scanCharactersFromSet:customPunctuationCharacterSet intoString:NULL]&&
    ![scanner scanCharactersFromSet:decimalDigitCharacterSet intoString:NULL]){

    *error = [ScreenValidation createNSError:1 message:@"You can only use letters, numbers and punctuation marks."];
    return NO;

}

Я понял, что результат из приведенного выше кода неверен, и, насколько я знаю, мне нужно объединить все NSCharacterSet в один для выполнения проверки. Кто-нибудь знает элегантное решение для этого и, конечно же, работает с несколькими местоположениями.

Большое спасибо и С уважением, Маркос


person vilelam    schedule 13.07.2013    source источник


Ответы (1)


Следующее создаст один набор символов из трех:

NSCharacterSet *letterCharacterSet = [NSCharacterSet letterCharacterSet];
NSCharacterSet *decimalDigitCharacterSet = [NSCharacterSet decimalDigitCharacterSet];
NSCharacterSet *customPunctuationCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@"_-."];

NSMutableCharacterSet *validationCharacterSet = [letterCharacterSet mutableCopy];
[validationCharacterSet formUnionWithCharacterSet:decimalDigitCharacterSet];    
[validationCharacterSet formUnionWithCharacterSet:customPunctuationCharacterSet];

Если вы хотите использовать этот набор символов в нескольких местах, вы должны добавить его как глобальный в какой-либо соответствующий класс. Другой вариант — создать категорию на NSCharacterSet и добавить ее туда.

person rmaddy    schedule 13.07.2013