NSRegularExpression无法正常工作

时间:2014-10-30 10:16:25

标签: ios crash nsstring nsregularexpression

您好我遇到问题,如果在字符串中没有电话号码且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])]];

1 个答案:

答案 0 :(得分:0)

我猜你得到一个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返回的范围是否违反了参考文献中记录的边界限制:

  

如果(aRange.location - 1),则引发NSRangeException   (aRange.location + aRange.length - 1)超出了   接收机。