Autofill: Improve heuristics for gift cards from credit card vendors.
[chromium-blink-merge.git] / components / autofill / core / browser / autofill_regex_constants.cc.utf8
blobac1d119e91fa7199167b9b6972546f692d53d199
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // This file contains UTF8 strings that we want as char arrays.  To avoid
6 // different compilers, we use a script to convert the UTF8 strings into
7 // numeric literals (\x##).
9 #include "components/autofill/core/browser/autofill_regex_constants.h"
11 namespace autofill {
13 /////////////////////////////////////////////////////////////////////////////
14 // address_field.cc
15 /////////////////////////////////////////////////////////////////////////////
16 const char kAttentionIgnoredRe[] = "attention|attn";
17 const char kRegionIgnoredRe[] =
18     "province|region|other"
19     "|provincia"  // es
20     "|bairro|suburb";  // pt-BR, pt-PT
21 const char kCompanyRe[] =
22     "company|business|organization|organisation"
23     "|firma|firmenname"  // de-DE
24     "|empresa"  // es
25     "|societe|société"  // fr-FR
26     "|ragione.?sociale"  // it-IT
27     "|会社"  // ja-JP
28     "|название.?компании"  // ru
29     "|单位|公司"  // zh-CN
30     "|회사|직장";  // ko-KR
31 const char kAddressLine1Re[] =
32     "address.*line|address1|addr1|street"
33     "|(shipping|billing)address$"
34     "|strasse|straße|hausnummer|housenumber"  // de-DE
35     "|house.?name"  // en-GB
36     "|direccion|dirección"  // es
37     "|adresse"  // fr-FR
38     "|indirizzo"  // it-IT
39     "|住所1"  // ja-JP
40     "|morada|endereço"  // pt-BR, pt-PT
41     "|Адрес"  // ru
42     "|地址"  // zh-CN
43     "|주소.?1";  // ko-KR
44 const char kAddressLine1LabelRe[] =
45     "address"
46     "|adresse"  // fr-FR
47     "|indirizzo"  // it-IT
48     "|住所"  // ja-JP
49     "|地址"  // zh-CN
50     "|주소";  // ko-KR
51 const char kAddressLine2Re[] =
52     "address.*line2|address2|addr2|street|suite|unit"
53     "|adresszusatz|ergänzende.?angaben"  // de-DE
54     "|direccion2|colonia|adicional"  // es
55     "|addresssuppl|complementnom|appartement"  // fr-FR
56     "|indirizzo2"  // it-IT
57     "|住所2"  // ja-JP
58     "|complemento|addrcomplement"  // pt-BR, pt-PT
59     "|Улица"  // ru
60     "|地址2"  // zh-CN
61     "|주소.?2";  // ko-KR
62 const char kAddressLine2LabelRe[] =
63     "address|line"
64     "|adresse"  // fr-FR
65     "|indirizzo"  // it-IT
66     "|地址"  // zh-CN
67     "|주소";  // ko-KR
68 const char kAddressLinesExtraRe[] =
69     "address.*line[3-9]|address[3-9]|addr[3-9]|street|line[3-9]"
70     "|municipio"  // es
71     "|batiment|residence"  // fr-FR
72     "|indirizzo[3-9]";  // it-IT
73 const char kAddressLookupRe[] =
74     "lookup";
75 const char kCountryRe[] =
76     "country|countries"
77     "|país|pais"  // es
78     "|国"  // ja-JP
79     "|国家"  // zh-CN
80     "|국가|나라";  // ko-KR
81 const char kCountryLocationRe[] =
82     "location";
83 const char kZipCodeRe[] =
84     "zip|postal|post.*code|pcode"
85     "|pin.?code"  // en-IN
86     "|postleitzahl"  // de-DE
87     "|\\bcp\\b"  // es
88     "|\\bcdp\\b"  // fr-FR
89     "|\\bcap\\b"  // it-IT
90     "|郵便番号"  // ja-JP
91     "|codigo|codpos|\\bcep\\b"  // pt-BR, pt-PT
92     "|Почтовый.?Индекс"  // ru
93     "|邮政编码|邮编"  // zh-CN
94     "|郵遞區號"  // zh-TW
95     "|우편.?번호";  // ko-KR
96 const char kZip4Re[] =
97     "zip|^-$|post2"
98     "|codpos2";  // pt-BR, pt-PT
99 const char kCityRe[] =
100     "city|town"
101     "|\\bort\\b|stadt"  // de-DE
102     "|suburb"  // en-AU
103     "|ciudad|provincia|localidad|poblacion"  // es
104     "|ville|commune"  // fr-FR
105     "|localita"  // it-IT
106     "|市区町村"  // ja-JP
107     "|cidade"  // pt-BR, pt-PT
108     "|Город"  // ru
109     "|市"  // zh-CN
110     "|分區"  // zh-TW
111     "|^시[^도·・]|시[·・]?군[·・]?구";  // ko-KR
112 const char kStateRe[] =
113     "(?<!united )state|county|region|province"
114     "|land"  // de-DE
115     "|county|principality"  // en-UK
116     "|都道府県"  // ja-JP
117     "|estado|provincia"  // pt-BR, pt-PT
118     "|область"  // ru
119     "|省"  // zh-CN
120     "|地區"  // zh-TW
121     "|^시[·・]?도";  // ko-KR
123 /////////////////////////////////////////////////////////////////////////////
124 // credit_card_field.cc
125 /////////////////////////////////////////////////////////////////////////////
126 const char kNameOnCardRe[] =
127     "card.?holder|name.*\\bon\\b.*card|(card|cc).?name|cc.?full.?name|owner"
128     "|karteninhaber"  // de-DE
129     "|nombre.*tarjeta"  // es
130     "|nom.*carte"  // fr-FR
131     "|nome.*cart"  // it-IT
132     "|名前"  // ja-JP
133     "|Имя.*карты"  // ru
134     "|信用卡开户名|开户名|持卡人姓名"  // zh-CN
135     "|持卡人姓名";  // zh-TW
136 const char kNameOnCardContextualRe[] =
137     "name";
138 const char kCardNumberRe[] =
139     "(card|cc|acct).?(number|#|no|num)"
140     "|nummer"  // de-DE
141     "|credito|numero|número"  // es
142     "|numéro"  // fr-FR
143     "|カード番号"  // ja-JP
144     "|Номер.*карты"  // ru
145     "|信用卡号|信用卡号码"  // zh-CN
146     "|信用卡卡號"  // zh-TW
147     "|카드";  // ko-KR
148 const char kCardCvcRe[] =
149     "verification|card identification|security code|card code"
150     "|cvn|cvv|cvc|csc|cvd|cid|ccv"
151     "|\\bcid\\b";
153 // "Expiration date" is the most common label here, but some pages have
154 // "Expires", "exp. date" or "exp. month" and "exp. year".  We also look
155 // for the field names ccmonth and ccyear, which appear on at least 4 of
156 // our test pages.
158 // On at least one page (The China Shop2.html) we find only the labels
159 // "month" and "year".  So for now we match these words directly; we'll
160 // see if this turns out to be too general.
162 // Toolbar Bug 51451: indeed, simply matching "month" is too general for
163 //   https://rps.fidelity.com/ftgw/rps/RtlCust/CreatePIN/Init.
164 // Instead, we match only words beginning with "month".
165 const char kExpirationMonthRe[] =
166     "expir|exp.*mo|exp.*date|ccmonth|cardmonth"
167     "|gueltig|gültig|monat"  // de-DE
168     "|fecha"  // es
169     "|date.*exp"  // fr-FR
170     "|scadenza"  // it-IT
171     "|有効期限"  // ja-JP
172     "|validade"  // pt-BR, pt-PT
173     "|Срок действия карты"  // ru
174     "|月";  // zh-CN
175 const char kExpirationYearRe[] =
176     "exp|^/|year"
177     "|ablaufdatum|gueltig|gültig|yahr"  // de-DE
178     "|fecha"  // es
179     "|scadenza"  // it-IT
180     "|有効期限"  // ja-JP
181     "|validade"  // pt-BR, pt-PT
182     "|Срок действия карты"  // ru
183     "|年|有效期";  // zh-CN
185 // This regex is a little bit nasty, but it is simply requiring exactly two
186 // adjacent y's.
187 const char kExpirationDate2DigitYearRe[] =
188     "exp.*date.*[^y]yy([^y]|$)";
189 const char kExpirationDateRe[] =
190     "expir|exp.*date"
191     "|gueltig|gültig"  // de-DE
192     "|fecha"  // es
193     "|date.*exp"  // fr-FR
194     "|scadenza"  // it-IT
195     "|有効期限"  // ja-JP
196     "|validade"  // pt-BR, pt-PT
197     "|Срок действия карты";  // ru
198 const char kGiftCardRe[] =
199     "gift.?card";
200 const char kDebitGiftCardRe[] =
201     "(visa|mastercard|discover|amex|american express).*gift.?card";
202 const char kDebitCardRe[] =
203     "debit.*card";
206 /////////////////////////////////////////////////////////////////////////////
207 // email_field.cc
208 /////////////////////////////////////////////////////////////////////////////
209 const char kEmailRe[] =
210     "e.?mail"
211     "|courriel"  // fr
212     "|メールアドレス"  // ja-JP
213     "|Электронной.?Почты"  // ru
214     "|邮件|邮箱"  // zh-CN
215     "|電郵地址"  // zh-TW
216     "|(이메일|전자.?우편|[Ee]-?mail)(.?주소)?";  // ko-KR
219 /////////////////////////////////////////////////////////////////////////////
220 // name_field.cc
221 /////////////////////////////////////////////////////////////////////////////
222 const char kNameIgnoredRe[] =
223     "user.?name|user.?id|nickname|maiden name|title|prefix|suffix"
224     "|vollständiger.?name"  // de-DE
225     "|用户名"  // zh-CN
226     "|(사용자.?)?아이디|사용자.?ID";  // ko-KR
227 const char kNameRe[] =
228     "^name|full.?name|your.?name|customer.?name|bill.?name|ship.?name"
229     "|name.*first.*last|firstandlastname"
230     "|nombre.*y.*apellidos"  // es
231     "|^nom"  // fr-FR
232     "|お名前|氏名"  // ja-JP
233     "|^nome"  // pt-BR, pt-PT
234     "|姓名"  // zh-CN
235     "|성명";  // ko-KR
236 const char kNameSpecificRe[] =
237     "^name"
238     "|^nom"  // fr-FR
239     "|^nome";  // pt-BR, pt-PT
240 const char kFirstNameRe[] =
241     "first.*name|initials|fname|first$|given.*name"
242     "|vorname"  // de-DE
243     "|nombre"  // es
244     "|forename|prénom|prenom"  // fr-FR
245     "|名"  // ja-JP
246     "|nome"  // pt-BR, pt-PT
247     "|Имя"  // ru
248     "|이름";  // ko-KR
249 const char kMiddleInitialRe[] = "middle.*initial|m\\.i\\.|mi$|\\bmi\\b";
250 const char kMiddleNameRe[] =
251     "middle.*name|mname|middle$"
252     "|apellido.?materno|lastlastname";  // es
253 const char kLastNameRe[] =
254     "last.*name|lname|surname|last$|secondname|family.*name"
255     "|nachname"  // de-DE
256     "|apellido"  // es
257     "|famille|^nom"  // fr-FR
258     "|cognome"  // it-IT
259     "|姓"  // ja-JP
260     "|morada|apelidos|surename|sobrenome"  // pt-BR, pt-PT
261     "|Фамилия"  // ru
262     "|성[^명]?";  // ko-KR
264 /////////////////////////////////////////////////////////////////////////////
265 // phone_field.cc
266 /////////////////////////////////////////////////////////////////////////////
267 const char kPhoneRe[] =
268     "phone|mobile"
269     "|telefonnummer"  // de-DE
270     "|telefono|teléfono"  // es
271     "|telfixe"  // fr-FR
272     "|電話"  // ja-JP
273     "|telefone|telemovel"  // pt-BR, pt-PT
274     "|телефон"  // ru
275     "|电话"  // zh-CN
276     "|(전화|핸드폰|휴대폰|휴대전화)(.?번호)?";  // ko-KR
277 const char kCountryCodeRe[] =
278     "country.*code|ccode|_cc";
279 const char kAreaCodeNotextRe[] =
280     "^\\($";
281 const char kAreaCodeRe[] =
282     "area.*code|acode|area"
283     "|지역.?번호";  // ko-KR
284 const char kPhonePrefixSeparatorRe[] =
285     "^-$|^\\)$";
286 const char kPhoneSuffixSeparatorRe[] =
287     "^-$";
288 const char kPhonePrefixRe[] =
289     "prefix|exchange"
290     "|preselection"  // fr-FR
291     "|ddd";  // pt-BR, pt-PT
292 const char kPhoneSuffixRe[] =
293     "suffix";
294 const char kPhoneExtensionRe[] =
295     "\\bext|ext\\b|extension"
296     "|ramal";  // pt-BR, pt-PT
298 }  // namespace autofill