2

我有一个包含用户名字段的 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 连接成一个来执行验证。有谁知道一个优雅的解决方案,当然,它适用于多个位置。

非常感谢和问候, 马科斯

4

1 回答 1

4

以下将从三个中创建一个字符集:

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

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

如果你想在多个地方使用这个字符集,你应该将它作为一个全局添加到某个适当的类中。另一种选择是创建一个类别NSCharacterSet并将其添加到那里。

于 2013-07-13T16:43:48.443 回答