isNationalPrefixPresentIfRequired static method
Implementation
static bool isNationalPrefixPresentIfRequired(
PhoneNumber number, PhoneNumberUtil util) {
// First, check how we deduced the country code. If it was written in international format, then
// the national prefix is not required.
if (number.countryCodeSource !=
PhoneNumber_CountryCodeSource.FROM_DEFAULT_COUNTRY) {
return true;
}
String phoneNumberRegion =
util.getRegionCodeForCountryCode(number.countryCode);
PhoneMetadata? metadata =
util.getMetadataForRegion(regionCode: phoneNumberRegion);
if (metadata == null) {
return true;
}
// Check if a national prefix should be present when formatting this number.
String nationalNumber = util.getNationalSignificantNumber(number);
NumberFormat? formatRule = util.chooseFormattingPatternForNumber(
metadata.numberFormat, nationalNumber);
// To do this, we check that a national prefix formatting rule was present and that it wasn't
// just the first-group symbol ($1) with punctuation.
if ((formatRule != null) &&
formatRule.nationalPrefixFormattingRule.isNotEmpty) {
if (formatRule.nationalPrefixOptionalWhenFormatting) {
// The national-prefix is optional in these cases, so we don't need to check if it was
// present.
return true;
}
if (PhoneNumberUtil.formattingRuleHasFirstGroupOnly(
formatRule.nationalPrefixFormattingRule)) {
// National Prefix not needed for this number.
return true;
}
// Normalize the remainder.
String rawInputCopy =
PhoneNumberUtil.normalizeDigitsOnly(number.rawInput);
StringBuffer rawInput = StringBuffer(rawInputCopy);
// Check if we found a national prefix and/or carrier code at the start of the raw input, and
// return the result.
return util.maybeStripNationalPrefixAndCarrierCode(
rawInput, metadata, null);
}
return true;
}