Further refinements to phone number parsing.

// FREEBIE
pull/1/head
Matthew Chen 8 years ago
parent 5dc4938746
commit 5846131976

@ -144,17 +144,25 @@ static NSString *const RPDefaultsKeyPhoneNumberCanonical = @"RPDefaultsKeyPhoneN
}
};
if ([sanitizedString hasPrefix:@"+"]) {
// If the text starts with "+", just parse it.
tryParsingWithCountryCode(sanitizedString, [self defaultRegionCode]);
if ([sanitizedString hasPrefix:@"+"]) {
// If the text starts with "+", don't try prepending
// anything else.
return result;
}
// Try just adding "+" and parsing it.
tryParsingWithCountryCode([NSString stringWithFormat:@"+%@", sanitizedString], [self defaultRegionCode]);
// Order matters; better results should appear first so prefer
// matches with the same country code as this client's phone number.
OWSAssert(clientPhoneNumber.length > 0);
if (clientPhoneNumber.length > 0) {
// Note that NBPhoneNumber uses "country code" to refer to what we call a
// "calling code" (i.e. 44 in +44123123). Within SSK we use "country code"
// (and sometimes "region code") to refer to a country's ISO 2-letter code
// (ISO 3166-1 alpha-2).
NSNumber *callingCodeForLocalNumber = [[PhoneNumber phoneNumberFromE164:clientPhoneNumber] getCountryCode];
if (callingCodeForLocalNumber != nil) {
tryParsingWithCountryCode([NSString stringWithFormat:@"+%@%@",
@ -162,13 +170,6 @@ static NSString *const RPDefaultsKeyPhoneNumberCanonical = @"RPDefaultsKeyPhoneN
sanitizedString],
[self defaultRegionCode]);
if ([sanitizedString hasPrefix:[NSString stringWithFormat:@"%d", callingCodeForLocalNumber.intValue]]) {
// If the text starts with the calling code for the local number, try
// just adding "+" and parsing it.
tryParsingWithCountryCode(
[NSString stringWithFormat:@"+%@", sanitizedString], [self defaultRegionCode]);
}
// It's gratuitous to try all country codes associated with a given
// calling code, but it can't hurt and this isn't a performance
// hotspot.
@ -183,9 +184,6 @@ static NSString *const RPDefaultsKeyPhoneNumberCanonical = @"RPDefaultsKeyPhoneN
}
}
// Also try matches using the phone's default region.
tryParsingWithCountryCode(sanitizedString, [self defaultRegionCode]);
return result;
}

Loading…
Cancel
Save