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