1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/autofill/phone_number.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/basictypes.h"
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string_util.h"
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/autofill/autofill_profile.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/autofill/autofill_type.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/autofill/field_types.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace {
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char16 kPhoneNumberSeparators[] = { ' ', '.', '(', ')', '-', 0 };
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The number of digits in a phone number.
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst size_t kPhoneNumberLength = 7;
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The number of digits in an area code.
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst size_t kPhoneCityCodeLength = 3;
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenconst AutofillType::FieldTypeSubGroup kAutofillPhoneTypes[] = {
24dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  AutofillType::PHONE_NUMBER,
25dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  AutofillType::PHONE_CITY_CODE,
26dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  AutofillType::PHONE_COUNTRY_CODE,
27dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  AutofillType::PHONE_CITY_AND_NUMBER,
28dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  AutofillType::PHONE_WHOLE_NUMBER,
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenconst int kAutofillPhoneLength = arraysize(kAutofillPhoneTypes);
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
35731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickPhoneNumber::PhoneNumber() {}
36731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenPhoneNumber::PhoneNumber(const PhoneNumber& number) : FormGroup() {
38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  *this = number;
39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
41731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickPhoneNumber::~PhoneNumber() {}
42731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenPhoneNumber& PhoneNumber::operator=(const PhoneNumber& number) {
44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (this == &number)
45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return *this;
46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  country_code_ = number.country_code_;
47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  city_code_ = number.city_code_;
48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  number_ = number.number_;
49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  extension_ = number.extension_;
50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  return *this;
51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid PhoneNumber::GetPossibleFieldTypes(const string16& text,
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                        FieldTypeSet* possible_types) const {
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  string16 stripped_text(text);
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  StripPunctuation(&stripped_text);
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (!Validate(stripped_text))
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return;
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (IsNumber(stripped_text))
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    possible_types->insert(GetNumberType());
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (IsCityCode(stripped_text))
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    possible_types->insert(GetCityCodeType());
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (IsCountryCode(stripped_text))
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    possible_types->insert(GetCountryCodeType());
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (IsCityAndNumber(stripped_text))
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    possible_types->insert(GetCityAndNumberType());
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (IsWholeNumber(stripped_text))
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    possible_types->insert(GetWholeNumberType());
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid PhoneNumber::GetAvailableFieldTypes(FieldTypeSet* available_types) const {
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DCHECK(available_types);
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (!number().empty())
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    available_types->insert(GetNumberType());
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (!city_code().empty())
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    available_types->insert(GetCityCodeType());
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (!country_code().empty())
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    available_types->insert(GetCountryCodeType());
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (!CityAndNumber().empty())
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    available_types->insert(GetCityAndNumberType());
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (!WholeNumber().empty())
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    available_types->insert(GetWholeNumberType());
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstring16 PhoneNumber::GetInfo(AutofillFieldType type) const {
96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (type == GetNumberType())
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return number();
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (type == GetCityCodeType())
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return city_code();
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (type == GetCountryCodeType())
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return country_code();
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (type == GetCityAndNumberType())
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return CityAndNumber();
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (type == GetWholeNumberType())
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return WholeNumber();
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return string16();
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid PhoneNumber::SetInfo(AutofillFieldType type, const string16& value) {
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  string16 number(value);
116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  StripPunctuation(&number);
117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (!Validate(number))
118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return;
119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  FieldTypeSubGroup subgroup = AutofillType(type).subgroup();
121dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  if (subgroup == AutofillType::PHONE_NUMBER)
122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    set_number(number);
123dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  else if (subgroup == AutofillType::PHONE_CITY_CODE)
124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    set_city_code(number);
125dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  else if (subgroup == AutofillType::PHONE_COUNTRY_CODE)
126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    set_country_code(number);
127dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  else if (subgroup == AutofillType::PHONE_CITY_AND_NUMBER ||
128dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen           subgroup == AutofillType::PHONE_WHOLE_NUMBER)
129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    set_whole_number(number);
130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  else
131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NOTREACHED();
132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Static.
135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool PhoneNumber::ParsePhoneNumber(const string16& value,
136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                   string16* number,
137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                   string16* city_code,
138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                   string16* country_code) {
139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DCHECK(number);
140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DCHECK(city_code);
141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DCHECK(country_code);
142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Make a working copy of value.
144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  string16 working = value;
145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  *number = string16();
147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  *city_code = string16();
148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  *country_code = string16();
149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // First remove any punctuation.
151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  StripPunctuation(&working);
152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (working.size() < kPhoneNumberLength)
154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return false;
155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Treat the last 7 digits as the number.
157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  *number = working.substr(working.size() - kPhoneNumberLength,
158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           kPhoneNumberLength);
159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  working.resize(working.size() - kPhoneNumberLength);
160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (working.size() < kPhoneCityCodeLength)
161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return true;
162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Treat the next three digits as the city code.
164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  *city_code = working.substr(working.size() - kPhoneCityCodeLength,
165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                              kPhoneCityCodeLength);
166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  working.resize(working.size() - kPhoneCityCodeLength);
167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (working.empty())
168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return true;
169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Treat any remaining digits as the country code.
171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  *country_code = working;
172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return true;
173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstring16 PhoneNumber::WholeNumber() const {
176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  string16 whole_number;
177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (!country_code_.empty())
178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    whole_number.append(country_code_);
179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (!city_code_.empty())
181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    whole_number.append(city_code_);
182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (!number_.empty())
184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    whole_number.append(number_);
185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return whole_number;
187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid PhoneNumber::set_number(const string16& number) {
190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  string16 digits(number);
191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  StripPunctuation(&digits);
192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  number_ = digits;
193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid PhoneNumber::set_whole_number(const string16& whole_number) {
196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  string16 number, city_code, country_code;
197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ParsePhoneNumber(whole_number, &number, &city_code, &country_code);
198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  set_number(number);
199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  set_city_code(city_code);
200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  set_country_code(country_code);
201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool PhoneNumber::IsNumber(const string16& text) const {
204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // TODO(isherman): This will need to be updated once we add support for
205ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // international phone numbers.
206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  const size_t kPhoneNumberPrefixLength = 3;
207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  const size_t kPhoneNumberSuffixLength = 4;
208ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  return
209ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      (text == number_) ||
210ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      (text.length() == kPhoneNumberPrefixLength &&
211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen       StartsWith(number_, text, true)) ||
212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      (text.length() == kPhoneNumberSuffixLength &&
213ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen       EndsWith(number_, text, true));
214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool PhoneNumber::IsCityCode(const string16& text) const {
217ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  return text == city_code_;
218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool PhoneNumber::IsCountryCode(const string16& text) const {
221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  return text == country_code_;
222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool PhoneNumber::IsCityAndNumber(const string16& text) const {
225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  return text == CityAndNumber();
226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool PhoneNumber::IsWholeNumber(const string16& text) const {
229ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  return text == WholeNumber();
230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool PhoneNumber::Validate(const string16& number) const {
233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  for (size_t i = 0; i < number.length(); ++i) {
234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    if (!IsAsciiDigit(number[i]))
235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return false;
236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return true;
239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Static.
242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid PhoneNumber::StripPunctuation(string16* number) {
243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  RemoveChars(*number, kPhoneNumberSeparators, number);
244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
245