我有一个包含用户名字段的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连接成一个来执行验证。有没有人知道一个优雅的解决方案,当然这适用于多个地点。
非常感谢和问候, 马科斯
答案 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
上创建一个类别并将其添加到那里。