gpt4 book ai didi

ios - NSDataDetector 无法检测到无效的电话号码

转载 作者:行者123 更新时间:2023-11-29 02:49:47 25 4
gpt4 key购买 nike

我正在尝试使用 NSDataDetector 来验证电话号码。它似乎没有用,这可能意味着我用错了,但我不知道怎么用。下面代码中的所有这些电话号码都应该失败,第一个全为零,其余的部分中有太多数字。然而他们都通过了验证。我不是 100% 确定它是否应该验证字符串的内容,所以第一个通过的可能是可以接受的,但其余的肯定不是。我做错了什么?

- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];

NSArray *phoneNumbers = @[@"000-000-0000", @"1234-567-8901", @"123-4567-8901", @"123-456-78901"];
for (NSString *phoneNumber in phoneNumbers)
{
if ([self phoneNumberIsValid:phoneNumber])
{
NSLog(@"%@ is valid", phoneNumber);
} else
{
NSLog(@"%@ is not valid", phoneNumber);
}
}
}

- (BOOL)phoneNumberIsValid:(NSString *)phoneNumber
{
BOOL returnValue = NO;
NSError *error = nil;

NSDataDetector *dataDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypePhoneNumber error:&error];
NSRange phoneRange = NSMakeRange(0, [phoneNumber length]);
NSArray *matches = [dataDetector matchesInString:phoneNumber options:0 range:phoneRange];

if (!error && [matches count] > 0)
{
NSTextCheckingResult *result = (NSTextCheckingResult *)[matches firstObject];
NSLog(@"found number: %@", result.phoneNumber);
if ([result resultType] == NSTextCheckingTypePhoneNumber && NSEqualRanges(result.range, phoneRange)) {
returnValue = YES;
}
}

return returnValue;
}

输出:

2014-07-11 10:27:15.520 PhoneValidationTest[90146:60b] 发现号码:000-000-00002014-07-11 10:27:15.522 PhoneValidationTest[90146:60b] 000-000-0000 有效2014-07-11 10:27:15.540 PhoneValidationTest[90146:60b] 发现号码:1234-567-89012014-07-11 10:27:15.540 PhoneValidationTest[90146:60b] 1234-567-8901 有效2014-07-11 10:27:15.542 PhoneValidationTest[90146:60b] 发现号码:123-4567-89012014-07-11 10:27:15.542 PhoneValidationTest[90146:60b] 123-4567-8901 有效2014-07-11 10:27:15.544 PhoneValidationTest[90146:60b] 发现号码:123-456-789012014-07-11 10:27:15.544 PhoneValidationTest[90146:60b] 123-456-78901 有效

最佳答案

我认为您假设 NSDataDetector 未提供行为。

NSDataDetector 不要求可能的电话号码符合特定格式,因此它会检测具有多种长度和视觉分隔符变化的数字,例如 -,因为这些不会影响拨出的号码。

看看http://en.wikipedia.org/wiki/National_conventions_for_writing_telephone_numbers对于电话号码目前使用的多种方式中的一些。我想您会发现您的所有示例至少在一个地区都有效。根据 rfc2806,它们也都符合 tel: url 的电话号码部分。 .

NSDataDetector 检测可能是电话号码的字符串。如果您想强制执行特定格式(希望知道您正在消除过程中的有效数字),您将必须自己进一步过滤这些结果。

关于ios - NSDataDetector 无法检测到无效的电话号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24703370/

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