检查字符串是否包含字符集中的一个字符
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];
我需要检查密码的复杂性。条件之一是密码必须至少包含一个数字。我尝试了以下方法,但它没有给我预期的结果,我不知道哪里出了问题。
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];