2 * Copyright (C) 2014 The Libphonenumber Authors
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package com.google.i18n.phonenumbers.internal;
19 import com.google.i18n.phonenumbers.Phonemetadata.PhoneNumberDesc;
20 import com.google.i18n.phonenumbers.RegexCache;
22 import java.util.regex.Matcher;
25 * Implementation of the matcher API using the regular expressions in the PhoneNumberDesc
26 * proto message to match numbers.
28 public final class RegexBasedMatcher implements MatcherApi {
29 public static MatcherApi create() {
30 return new RegexBasedMatcher();
33 private final RegexCache regexCache = new RegexCache(100);
35 private RegexBasedMatcher() {}
38 public boolean matchesNationalNumber(String nationalNumber, PhoneNumberDesc numberDesc,
39 boolean allowPrefixMatch) {
40 Matcher nationalNumberPatternMatcher = regexCache.getPatternForRegex(
41 numberDesc.getNationalNumberPattern()).matcher(nationalNumber);
42 return nationalNumberPatternMatcher.matches()
43 || (allowPrefixMatch && nationalNumberPatternMatcher.lookingAt());
47 public boolean matchesPossibleNumber(String nationalNumber, PhoneNumberDesc numberDesc) {
48 Matcher possibleNumberPatternMatcher = regexCache.getPatternForRegex(
49 numberDesc.getPossibleNumberPattern()).matcher(nationalNumber);
50 return possibleNumberPatternMatcher.matches();