检查NSString是否包含特殊字符和数字

时间:2011-07-18 08:41:15

标签: objective-c string cocoa cocoa-touch nsstring

我需要检查字符串是否包含一个大写字母,一个小写字母,一个整数和一个特殊字符。我该如何检查?

5 个答案:

答案 0 :(得分:14)

没有任何其他框架:

NSCharacterSet * set = [[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"] 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.");
}

答案 1 :(得分:9)

发现稍微好一点的实现。对Ameesh答案的改进

- (BOOL)isValidString:(NSString *)string
{
    return [string rangeOfCharacterFromSet:[NSCharacterSet uppercaseLetterCharacterSet]].location != NSNotFound &&
    [string rangeOfCharacterFromSet:[NSCharacterSet lowercaseLetterCharacterSet]].location != NSNotFound &&
    [string rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]].location != NSNotFound;
}

答案 2 :(得分:4)

Maulik的回答是不正确的。这将检查除任何字母数字字符以外的任何内容,但不强制执行一个大写字母,一个小写字母和一个整数。事实上,您必须进行3次检查以验证每个约束。

NSCharacterSet *lowerCaseChars = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyz"];

NSCharacterSet *upperCaseChars = [NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLKMNOPQRSTUVWXYZ"];

NSCharacterSet *numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];

if ([aString rangeOfCharacterFromSet:lowerCaseChars].location == NSNotFound || [aString rangeOfCharacterFromSet:upperCaseChars].location = NSNotFound || [aString rangeOfCharacterFromSet:numbers].location == NSNotFound) {
 NSLog(@"This string contains illegal characters");
}

答案 3 :(得分:1)

支持阿拉伯语/英语

NSString *regEx = @"^([a-zA-Z0-9\u0600-\u06ff](\\-|\\_|\\.|\\ )?)+$";
        NSPredicate *regExPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regEx];
        BOOL myStringMatchesRegEx = [regExPredicate evaluateWithObject: self.text];
        if (!myStringMatchesRegEx)
            return NO;

答案 4 :(得分:-1)

这是我要做的。为需要检查相应值是否存在的每个条件创建正则表达式。

即。正则表达式检查它是否有一个大写字母,一个小写字母,一个整数和一个特殊字符,依此类推。

然后使用相同的字符串来检查每个正则表达式,如果所有正则表达式都返回true,那么如果没有则获胜者则字符串与您的条件不匹配。

//验证UpperCaseLetter的示例对匹配正则表达式的所有其他示例执行相同的操作。

-(BOOL) validateOneUpperCaseLetter:(NSString *)string {
if ((string == nil) || ([string isEqualToString: @""])) {
    return NO;
}

// Change this regEx to one you needed. // this one validates for the "name".  
NSString *regEx = @"^[a-zA-Z]+(([\\'\\,\\.\\ -][a-zA-Z])?[a-zA-Z]\\s*)*$";
NSPredicate *regExPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regEx];
BOOL myStringMatchesRegEx = [regExPredicate evaluateWithObject: string];

if (!myStringMatchesRegEx) {
    return NO;
}
return YES;}