我需要检查密码的复杂性。其中一个条件是密码必须至少包含一个数字。我尝试了以下方法,但它没有给我预期的结果,我不知道什么是错的。
NSString *regexpNumbers = @"[0-9]+";
NSPredicate *predicateNumbers = [NSPredicate predicateWithFormat:@"SELF CONTAINS %@", regexpNumbers];
result &= [predicateNumbers evaluateWithObject:password];
evaluateWithObject:方法返回NO,即使密码包含某个数字。
答案 0 :(得分:1)
使用rangeOfCharacterFromSet
:
您可以按照以下方式创建自己的字符集:
NSCharacterSet *s = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_"];
s = [s invertedSet];
NSString *string = @"String to find";
NSRange r = [string rangeOfCharacterFromSet:s];
if (r.location != NSNotFound) {
NSLog(@"the string contains illegal characters");
} else {
NSLog(@"Found!!!");
}
使用NSPredicate
:
NSString *myRegex = @"[A-Z0-9a-z_]*";
NSPredicate *myTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", myRegex];
NSString *string = @"String to find";
BOOL valid = [myTest evaluateWithObject:string];
答案 1 :(得分:0)
将NSPredicate
与正则表达式一起使用时,您需要使用MATCHES
,而不是CONTAINS
(用于直接文字比较)。
可以说你不应该这样做。有一个论点,它应该在服务器上完成。
您还可以使用rangeOfCharacterFromSet:
和NSCharacterSet
代替每个支票使用正则表达式。