【问题标题】:Checking to see if an NSString contains characters from a different NSString检查 NSString 是否包含来自不同 NSString 的字符
【发布时间】:2011-04-22 20:41:25
【问题描述】:

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

例如:想象一个只有数字和“*”的密码: 参考链(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

【问题讨论】:

    标签: objective-c cocoa nsstring nspredicate


    【解决方案1】:

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

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

    【讨论】:

    • NSRange range = [inputString rangeOfCharacterFromSet:allowed]; allowed 是否应该更改为 notAllowed
    • 啊太棒了。还有很好的答案,+1
    【解决方案2】:

    如果你想使用NSPredicate,你可以这样做:

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

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

    【讨论】:

    • 嗨,工作正常,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 2011-06-09
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    相关资源
    最近更新 更多