11

これが毎回trueと評価される理由を誰か教えてもらえますか?!

入力は次のとおりjkhkjhkjです。phoneフィールドに何を入力してもかまいません。毎回本当です...

NSRange range = NSMakeRange (0, [phone length]);    
NSTextCheckingResult *match = [NSTextCheckingResult phoneNumberCheckingResultWithRange:range phoneNumber:phone];
if ([match resultType] == NSTextCheckingTypePhoneNumber)
{
    return YES;
}
else 
{
    return NO;
}

の値は次のmatchとおりです。

(NSTextCheckingResult *) $4 = 0x0ab3ba30 <NSPhoneNumberCheckingResult: 0xab3ba30>{0, 8}{jkhkjhkj}

私はRegExを使用してNSPredicateいましたが、iOS4以降の使用NSTextCheckingResultが推奨されていることを読みましたが、これに関する良いチュートリアルや例が見つかりません.

前もって感謝します!

4

1 に答える 1

37

クラスの使い方が間違っています。またはNSTextCheckingResultによって行われるテキスト チェックの結果です。代わりに使用してください:NSDataDetectorNSRegularExpressionNSDataDetector

NSError *error = NULL;
NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypePhoneNumber error:&error];

NSRange inputRange = NSMakeRange(0, [phone length]);
NSArray *matches = [detector matchesInString:phone options:0 range:inputRange];

// no match at all
if ([matches count] == 0) {
    return NO;
}

// found match but we need to check if it matched the whole string
NSTextCheckingResult *result = (NSTextCheckingResult *)[matches objectAtIndex:0];

if ([result resultType] == NSTextCheckingTypePhoneNumber && result.range.location == inputRange.location && result.range.length == inputRange.length) {
    // it matched the whole string
    return YES;
}
else {
    // it only matched partial string
    return NO;
}
于 2012-07-11T13:30:18.637 に答える