17a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes/*
27a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes * Copyright (C) 2014 The Libphonenumber Authors
37a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes *
47a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes * Licensed under the Apache License, Version 2.0 (the "License");
57a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes * you may not use this file except in compliance with the License.
67a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes * You may obtain a copy of the License at
77a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes *
87a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes * http://www.apache.org/licenses/LICENSE-2.0
97a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes *
107a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes * Unless required by applicable law or agreed to in writing, software
117a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes * distributed under the License is distributed on an "AS IS" BASIS,
127a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes * See the License for the specific language governing permissions and
147a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes * limitations under the License.
157a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes */
167a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes
17a77faddfc3b3e4cca8f585c82d669054aec221f4Narayan Kamathpackage com.google.i18n.phonenumbers.internal;
187a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes
19edd65d0141c2d36a410335316d62a82f1f305ecaPaul Duffinimport com.google.i18n.phonenumbers.Phonemetadata.PhoneNumberDesc;
20a77faddfc3b3e4cca8f585c82d669054aec221f4Narayan Kamathimport com.google.i18n.phonenumbers.RegexCache;
217a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes
227a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roesimport java.util.regex.Matcher;
237a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes
247a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes/**
257a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes * Implementation of the matcher API using the regular expressions in the PhoneNumberDesc
267a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes * proto message to match numbers.
277a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes */
287a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roespublic final class RegexBasedMatcher implements MatcherApi {
297a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes  public static MatcherApi create() {
307a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes    return new RegexBasedMatcher();
317a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes  }
327a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes
337a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes  private final RegexCache regexCache = new RegexCache(100);
347a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes
357a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes  private RegexBasedMatcher() {}
367a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes
377a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes  // @Override
387a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes  public boolean matchesNationalNumber(String nationalNumber, PhoneNumberDesc numberDesc,
397a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes      boolean allowPrefixMatch) {
407a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes    Matcher nationalNumberPatternMatcher = regexCache.getPatternForRegex(
41edd65d0141c2d36a410335316d62a82f1f305ecaPaul Duffin        numberDesc.getNationalNumberPattern()).matcher(nationalNumber);
427a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes    return nationalNumberPatternMatcher.matches()
437a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes        || (allowPrefixMatch && nationalNumberPatternMatcher.lookingAt());
447a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes  }
457a81979b0076f18b31b47b7df2beac29735f3a37Cecilia Roes}
46