2012-10-10 57 views
1

我使用:NSPredicate正则表达式不工作

+ (BOOL)isPassword:(NSString*)password { 
    NSString* pattern = @"^(?=.{6,20}$).*$"; 
    NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern]; 
    return [predicate evaluateWithObject:password]; 
} 

,但它是""返回肯定的。有小费吗?

回答

2

正如@Pfitz所指出的那样,您没有SELF。例如,在过滤数组时使用。

尝试使用NSRegularExpression代替。

NSError *error = nil; 
NSRegularExpression *regex = [NSRegularExpression 
           regularExpressionWithPattern:@"^(?=.{6,20}$).*$" 
           options:NSRegularExpressionCaseInsensitive 
           error:&error]; 
NSTextCheckingResult *match = [regex firstMatchInString:password 
               options:0 
                range:NSMakeRange(0, [password length])]; 
if (match) { 
    NSRange range = [match range]; 
    if (range.location != NSNotFound) { 
     // match 
    } 
} 
+0

我不能,它不是iOS 4兼容。 – lolol

+0

这是iOS 4兼容,这里是正确的链接:http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSRegularExpression_Class/Reference/Reference.html – vikingosegundo

+2

btw:你应该标记你问题与iOS如果要求iOS ... – vikingosegundo