summaryrefslogtreecommitdiff
path: root/libphonenumber/src/com/google/i18n/phonenumbers/internal/RegexBasedMatcher.java
diff options
context:
space:
mode:
Diffstat (limited to 'libphonenumber/src/com/google/i18n/phonenumbers/internal/RegexBasedMatcher.java')
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/internal/RegexBasedMatcher.java24
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;
+ }
}
}