UITextfield内容验证(字母,数字和特殊标点符号)

时间:2013-07-13 16:36:48

标签: ios objective-c uitextfield nscharacterset

我有一个包含用户名字段的UITextfield,然后我想添加一个验证,这样用户就无法输入与字母,数字和“_-”不同的用户名。标点符号。我正在尝试使用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连接成一个来执行验证。有没有人知道一个优雅的解决方案,当然这适用于多个地点。

非常感谢和问候, 马科斯

1 个答案:

答案 0 :(得分:4)

以下内容将从三个中创建单个字符集:

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

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

如果要在多个位置使用此字符集,则应将其作为全局添加到某个适当的类中。另一种选择是在NSCharacterSet上创建一个类别并将其添加到那里。