checkNumberGroupingIsValid method

bool checkNumberGroupingIsValid(
  1. PhoneNumber number,
  2. String candidate,
  3. PhoneNumberUtil util,
  4. NumberGroupingChecker checker,
)

Implementation

bool checkNumberGroupingIsValid(PhoneNumber number, String candidate,
    PhoneNumberUtil util, NumberGroupingChecker checker) {
  StringBuffer normalizedCandidate =
      PhoneNumberUtil.normalizeDigits(candidate, true /* keep non-digits */);
  List<String> formattedNumberGroups = _getNationalNumberGroups(util, number);

  if (checker(util, number, normalizedCandidate, formattedNumberGroups)) {
    return true;
  }

  // If this didn't pass, see if there are any alternate formats that match, and try them instead.
  PhoneMetadata? alternateFormats =
      _phoneUtil.getAlternateFormatsMetadata(number.countryCode);
  String nationalSignificantNumber =
      util.getNationalSignificantNumber(number);

  if (alternateFormats != null) {
    for (NumberFormat alternateFormat in alternateFormats.numberFormat) {
      if (alternateFormat.leadingDigitsPattern.isNotEmpty) {
        // There is only one leading digits pattern for alternate formats.
        RegExp pattern = RegExp(alternateFormat.leadingDigitsPattern[0]);

        if (pattern.firstMatch(nationalSignificantNumber)?.start != 0) {
          // Leading digits don't match; try another one.
          continue;
        }
      }

      formattedNumberGroups =
          _getNationalNumberGroups(util, number, alternateFormat);
      if (checker(util, number, normalizedCandidate, formattedNumberGroups)) {
        return true;
      }
    }
  }
  return false;
}