private bool MatchesEmergencyNumberHelper(String number, String regionCode,
bool allowPrefixMatch)
{
number = PhoneNumberUtil.ExtractPossibleNumber(number);
if (PhoneNumberUtil.PlusCharsPattern.MatchBeginning(number).Success)
{
// Returns false if the number starts with a plus sign. We don't believe dialing the country
// code before emergency numbers (e.g. +1911) works, but later, if that proves to work, we can
// add additional logic here to handle it.
return(false);
}
var metadata = phoneUtil.GetMetadataForRegion(regionCode);
if (metadata == null || !metadata.HasEmergency)
{
return(false);
}
var emergencyNumberPattern =
new PhoneRegex(metadata.Emergency.NationalNumberPattern);
var normalizedNumber = PhoneNumberUtil.NormalizeDigitsOnly(number);
// In Brazil, it is impossible to append additional digits to an emergency number to dial the
// number.
return((!allowPrefixMatch || regionCode.Equals("BR"))
? emergencyNumberPattern.MatchAll(normalizedNumber).Success
: emergencyNumberPattern.MatchBeginning(normalizedNumber).Success);
}