1 #include "phonenumbers/regex_based_matcher.h"
6 #include "phonenumbers/base/memory/scoped_ptr.h"
7 #include "phonenumbers/phonemetadata.pb.h"
8 #include "phonenumbers/regexp_adapter.h"
9 #include "phonenumbers/regexp_cache.h"
10 #include "phonenumbers/regexp_factory.h"
13 namespace phonenumbers {
17 // Same implementations of AbstractRegExpFactory and RegExpCache in
18 // PhoneNumberUtil (copy from phonenumberutil.cc).
19 RegexBasedMatcher::RegexBasedMatcher()
20 : regexp_factory_(new RegExpFactory()),
21 regexp_cache_(new RegExpCache(*regexp_factory_, 128)) {}
23 RegexBasedMatcher::~RegexBasedMatcher() {}
25 bool RegexBasedMatcher::MatchesNationalNumber(
26 const string& national_number, const PhoneNumberDesc& number_desc,
27 bool allow_prefix_match) const {
28 return Match(national_number, number_desc.national_number_pattern(),
32 bool RegexBasedMatcher::MatchesPossibleNumber(
33 const string& national_number, const PhoneNumberDesc& number_desc) const {
34 return Match(national_number, number_desc.possible_number_pattern(), false);
37 bool RegexBasedMatcher::Match(const string& national_number,
38 const string& number_pattern,
39 bool allow_prefix_match) const {
40 const RegExp& regexp(regexp_cache_->GetRegExp(number_pattern));
42 if (allow_prefix_match) {
43 const scoped_ptr<RegExpInput> normalized_number_input(
44 regexp_factory_->CreateInput(national_number));
45 return regexp.Consume(normalized_number_input.get());
47 return regexp.FullMatch(national_number);
51 } // namespace phonenumbers