diff options
Diffstat (limited to 'libphonenumber/src/com/google/i18n/phonenumbers/internal/RegexBasedMatcher.java')
-rw-r--r-- | libphonenumber/src/com/google/i18n/phonenumbers/internal/RegexBasedMatcher.java | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/internal/RegexBasedMatcher.java b/libphonenumber/src/com/google/i18n/phonenumbers/internal/RegexBasedMatcher.java index 8742bdf8..ed18ed09 100644 --- a/libphonenumber/src/com/google/i18n/phonenumbers/internal/RegexBasedMatcher.java +++ b/libphonenumber/src/com/google/i18n/phonenumbers/internal/RegexBasedMatcher.java @@ -17,9 +17,9 @@ package com.google.i18n.phonenumbers.internal; import com.google.i18n.phonenumbers.Phonemetadata.PhoneNumberDesc; -import com.google.i18n.phonenumbers.RegexCache; import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * Implementation of the matcher API using the regular expressions in the PhoneNumberDesc @@ -35,11 +35,23 @@ public final class RegexBasedMatcher implements MatcherApi { private RegexBasedMatcher() {} // @Override - public boolean matchesNationalNumber(String nationalNumber, PhoneNumberDesc numberDesc, + public boolean matchNationalNumber(CharSequence number, PhoneNumberDesc numberDesc, boolean allowPrefixMatch) { - Matcher nationalNumberPatternMatcher = regexCache.getPatternForRegex( - numberDesc.getNationalNumberPattern()).matcher(nationalNumber); - return nationalNumberPatternMatcher.matches() - || (allowPrefixMatch && nationalNumberPatternMatcher.lookingAt()); + String nationalNumberPattern = numberDesc.getNationalNumberPattern(); + // We don't want to consider it a prefix match when matching non-empty input against an empty + // pattern. + if (nationalNumberPattern.length() == 0) { + return false; + } + return match(number, regexCache.getPatternForRegex(nationalNumberPattern), allowPrefixMatch); + } + + private static boolean match(CharSequence number, Pattern pattern, boolean allowPrefixMatch) { + Matcher matcher = pattern.matcher(number); + if (!matcher.lookingAt()) { + return false; + } else { + return (matcher.matches()) ? true : allowPrefixMatch; + } } } |