检查NSString是否包含来自不同NSString的字符

时间:2011-04-22 20:41:25

标签: objective-c cocoa nsstring nspredicate

我正在寻找一种比较两个字符串的方法,看看第二个字符串是否包含第一个中列出的字符(字母,数字,其他),让我解释一下:

例如:想象一下只有数字的密码,允许使用“*”: 参考链(1):“* 0123456789”NSString格式,无NSArray 工作链(2)=“156/15615 = 211”NSString格式,

我怎么知道我的链2包含2个字符(/ =)哪个不在我的链1中?

为了简化允许的管理信函,我不想使用NSArray来管理链,例如函数调用:

BOOL unauthorized_letter_found = check(work_chain, reference_chain);

你必须通过“for”,NSPredicate等吗?

PS:我在MAC OS上,而不是iOS,所以我不能使用NSRegularExpression

2 个答案:

答案 0 :(得分:9)

你可以使用字符集,例如使用-rangeOfCharacterFromSet:检查是否存在禁用字符:

NSCharacterSet *notAllowed = [[NSCharacterSet 
    characterSetWithCharactersInString:@"*0123456789"] invertedSet];
NSRange range = [inputString rangeOfCharacterFromSet:notAllowed];
BOOL unauthorized = (range.location != NSNotFound);

答案 1 :(得分:5)

如果您想使用NSPredicate,可以执行以下操作:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES '[0-9*]+'"];
if ([predicate evaluateWithObject:@"0*2481347*"]) {
  NSLog(@"passes!");
} else {
  NSLog(@"fails!");
}

这是使用NSPredicate的内置正则表达式匹配的东西。 :)