嗨,我遇到了一个问题,即如果字符串中没有电话号码,并且NSRegularExpression找不到任何应用程序崩溃,但是当它在字符串中找到电话号码时,它的工作正常,没有问题。我如何才能防止它崩溃。

NSRegularExpression *phoneexpression = [NSRegularExpression regularExpressionWithPattern:@"\\d{4}-\\d{4}"options:NSRegularExpressionCaseInsensitive error:NULL];
NSString *phString = TextString;
NSString *PH = [phString substringWithRange:[phoneexpression rangeOfFirstMatchInString:phString options:NSMatchingCompleted range:NSMakeRange(0, [phString length])]];

我认为这是问题所在
NSString *PH = [phString substringWithRange:[phoneexpression rangeOfFirstMatchInString:phString options:NSMatchingCompleted range:NSMakeRange(0, [phString length])]];

最佳答案

我猜你得到一个NSRangeException。

尝试这种方式:

NSString *PH = nil;
NSRegularExpression *phoneexpression = [NSRegularExpression regularExpressionWithPattern:@"\\d{4}-\\d{4}"options:NSRegularExpressionCaseInsensitive error:NULL];
NSString *phString = TextString;
NSRange rg = [phoneexpression rangeOfFirstMatchInString:phString options:NSMatchingCompleted range:NSMakeRange(0, [phString length])];

if(rg.location != NSNotFound)
    PH = [phString substringWithRange:rg];

在将返回的范围传递给substringWithRange之前,请务必检查该范围。
有关更多信息,请参见此参考:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/#//apple_ref/occ/instm/NSString/substringWithRange:

编辑:
还要检查从rangeOfFirstMatchInString返回的范围是否不违反参考中记录的边界限制:

10-08 01:15