检查字符串是否包含字符集中的一个字符

Check that string contains a character from set of characters

我需要检查密码的复杂性。条件之一是密码必须至少包含一个数字。我尝试了以下方法,但它没有给我预期的结果,我不知道哪里出了问题。

NSString *regexpNumbers = @"[0-9]+";
NSPredicate *predicateNumbers = [NSPredicate predicateWithFormat:@"SELF CONTAINS %@", regexpNumbers];
result &= [predicateNumbers evaluateWithObject:password];

evaluateWithObject: 方法returns否,即使密码包含一些数字。

在正则表达式中使用 NSPredicate 时,您需要使用 MATCHES,而不是 CONTAINS(用于直接文字比较)。

虽然可以说你不应该这样做。有一种说法认为它应该在服务器上完成。

除了使用正则表达式之外,您还可以为每个检查使用 rangeOfCharacterFromSet:NSCharacterSet

使用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];