gpt4 book ai didi

objective-c - NSDataDetector 检测 "phone number"文本

转载 作者:太空狗 更新时间:2023-10-30 03:29:29 26 4
gpt4 key购买 nike

我能解释这个问题的最简单方法是使用代码示例及其输出,但本质上发生的事情是 NSDataDetector 正在检测包含单词“phone number”的字符串中的电话号码。

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

我已经阅读了文档并围绕 SO 进行了搜索,但找不到任何表明这是否是预期行为的信息,如果是,原因是什么。

这发生在 7.0 模拟器以及我运行 7.0.4 的 iPhone 5s 上。

如果有人能阐明这个问题,我将不胜感激。

更新:澄清一下,我不希望文本“电话号码”成为访问 NSTextCheckingResult phoneNumber 属性时结果的一部分。

最佳答案

虽然这看起来确实是 Apple 代码中的一个错误,但如果您只想通过消除 block 中的非数字字符从字符串中提取数字,则有一个简单的解决方法:

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");
}
}];
}

关于objective-c - NSDataDetector 检测 "phone number"文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20179639/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com