in matcher.go [175:211]
func AllNumberGroupsAreExactlyPresent(
number *PhoneNumber,
normalizedCandidate string,
formattedNumberGroups []string) bool {
var candidateGroups = NON_DIGITS_PATTERN.FindAllString(normalizedCandidate, -1)
// Set this to the last group, skipping it if the number has an extension.
var candidateNumberGroupIndex = len(candidateGroups) - 2
if number.GetExtension() != "" {
candidateNumberGroupIndex = len(candidateGroups) - 1
}
// First we check if the national significant number is formatted
// as a block. We use contains and not equals, since the national
// significant number may be present with a prefix such as a national
// number prefix, or the country code itself.
if len(candidateGroups) == 1 || strings.Contains(
candidateGroups[candidateNumberGroupIndex],
GetNationalSignificantNumber(number)) {
return true
}
// Starting from the end, go through in reverse, excluding the first
// group, and check the candidate and number groups are the same.
for formattedNumberGroupIndex := len(formattedNumberGroups) - 1; formattedNumberGroupIndex > 0 && candidateNumberGroupIndex >= 0; formattedNumberGroupIndex-- {
if candidateGroups[candidateNumberGroupIndex] !=
formattedNumberGroups[formattedNumberGroupIndex] {
return false
}
candidateNumberGroupIndex--
}
// Now check the first group. There may be a national prefix at
// the start, so we only check that the candidate group ends with
// the formatted number group.
return (candidateNumberGroupIndex >= 0 &&
strings.HasSuffix(candidateGroups[candidateNumberGroupIndex],
formattedNumberGroups[0]))
}