isNationalPrefixPresentIfRequired static method

bool isNationalPrefixPresentIfRequired(
  1. PhoneNumber number,
  2. PhoneNumberUtil util
)

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;
}