我能解释这个问题的最简单的方法是使用代码示例及其输出,但实际上发生的是NSDataDetector检测字符串中包含“电话号码”的电话号码。
NSError *error = nil;
NSDataDetector *dataDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypePhoneNumber
error:&error];
NSArray *stringsToTest = @[
@"testing phone number 0123 4567891",
@"testing some other number 0123 4567892",
@"phone number 0123 4567893",
@"blah blah 0123 4567894",
@"testing telephone number 0123 4567895"
];
for (NSString *string in stringsToTest)
{
[dataDetector enumerateMatchesInString:string
options:0
range:NSMakeRange(0, string.length)
usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
NSLog(@"%@", result.phoneNumber);
}];
}输出:
2013-11-24 19:04:26.000 PhoneNumberDetector[21874:70b] phone number 0123 4567891
2013-11-24 19:04:26.000 PhoneNumberDetector[21874:70b] 0123 4567892
2013-11-24 19:04:26.000 PhoneNumberDetector[21874:70b] phone number 0123 4567893
2013-11-24 19:04:26.000 PhoneNumberDetector[21874:70b] 0123 4567894
2013-11-24 19:04:26.001 PhoneNumberDetector[21874:70b] 0123 4567895我已经阅读了文档并四处搜索,但找不到任何东西来说明这是否是预期的行为,如果是,原因是什么。
这种情况发生在7.0模拟器以及运行7.0.4的iPhone 5s上。
如果有人能对这个问题有所了解的话,我会非常感激的。
更新:澄清,在访问NSTextCheckingResult phoneNumber属性时,我不希望文本“电话号码”成为结果的一部分。
发布于 2013-11-26 23:43:11
虽然这似乎是Apple代码中的一个bug,但如果您想通过删除块中的非数字字符从字符串中提取数字,则有一个简单的解决方法:
NSError *error = nil;
NSDataDetector *dataDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypePhoneNumber
error:&error];
NSArray *stringsToTest = @[
@"testing phone number 0123 4567891",
@"testing some other number 0123 4567892",
@"phone number 0123 4567893",
@"blah blah 0123 4567894",
@"testing telephone number 0123 4567895",
@"phone",
@"number",
@"my phone number 1234587985",
@"this string does not contain a phone number"
];
for (NSString *string in stringsToTest)
{
[dataDetector enumerateMatchesInString:string
options:0
range:NSMakeRange(0, string.length)
usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop)
{
NSString *numberWithExtra = result.phoneNumber;
NSCharacterSet *toRemove = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
NSString *trimmed = [[numberWithExtra componentsSeparatedByCharactersInSet:toRemove] componentsJoinedByString:@""];
if(trimmed && trimmed.length)
{
NSLog(@"%@", trimmed);
}
else
{
NSLog(@"No phone number");
}
}];
}https://stackoverflow.com/questions/20179639
复制相似问题