blob: 6af11a178b34ee0be245b3dd815d20ea10440627 [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file contains UTF8 strings that we want as char arrays. To avoid
// different compilers, we use a script to convert the UTF8 strings into
// numeric literals (\x##).
#include "components/autofill/core/common/autofill_regex_constants.h"
namespace autofill {
/////////////////////////////////////////////////////////////////////////////
// address_field.cc
/////////////////////////////////////////////////////////////////////////////
const char kAttentionIgnoredRe[] = "attention|attn";
const char kRegionIgnoredRe[] =
"province|region|other"
"|provincia" // es
"|bairro|suburb"; // pt-BR, pt-PT
const char kAddressNameIgnoredRe[] = "address.*nickname|address.*label";
const char kCompanyRe[] =
"company|business|organization|organisation"
"|(?<!con)firma|firmenname" // de-DE
"|empresa" // es
"|societe|société" // fr-FR
"|ragione.?sociale" // it-IT
"|会社" // ja-JP
"|название.?компании" // ru
"|单位|公司" // zh-CN
"|شرکت" // fa
"|회사|직장"; // ko-KR
const char kAddressLine1Re[] =
"^address$|address[_-]?line(one)?|address1|addr1|street"
"|(?:shipping|billing)address$"
"|strasse|straße|hausnummer|housenumber" // de-DE
"|house.?name" // en-GB
"|direccion|dirección" // es
"|adresse" // fr-FR
"|indirizzo" // it-IT
"|^住所$|住所1" // ja-JP
"|morada|endereço" // pt-BR, pt-PT
"|Адрес" // ru
"|地址" // zh-CN
"|^주소.?$|주소.?1"; // ko-KR
const char kAddressLine1LabelRe[] =
"(^\\W*address)"
"|(address\\W*$)"
"|(?:shipping|billing|mailing|pick.?up|drop.?off|delivery|sender|postal|"
"recipient|home|work|office|school|business|mail)[\\s\\-]+address"
"|address\\s+(of|for|to|from)"
"|adresse" // fr-FR
"|indirizzo" // it-IT
"|住所" // ja-JP
"|地址" // zh-CN
"|주소"; // ko-KR
const char kAddressLine2Re[] =
"address[_-]?line(2|two)|address2|addr2|street|suite|unit"
"|adresszusatz|ergänzende.?angaben" // de-DE
"|direccion2|colonia|adicional" // es
"|addresssuppl|complementnom|appartement" // fr-FR
"|indirizzo2" // it-IT
"|住所2" // ja-JP
"|complemento|addrcomplement" // pt-BR, pt-PT
"|Улица" // ru
"|地址2" // zh-CN
"|주소.?2"; // ko-KR
const char kAddressLine2LabelRe[] =
"address|line"
"|adresse" // fr-FR
"|indirizzo" // it-IT
"|地址" // zh-CN
"|주소"; // ko-KR
const char kAddressLinesExtraRe[] =
"address.*line[3-9]|address[3-9]|addr[3-9]|street|line[3-9]"
"|municipio" // es
"|batiment|residence" // fr-FR
"|indirizzo[3-9]"; // it-IT
const char kAddressLookupRe[] = "lookup";
const char kCountryRe[] =
"country|countries"
"|país|pais" // es
"|land(?!.*(mark.*))" // de-DE landmark is another field type in India.
"|(?<!(入|出))国" // ja-JP
"|国家" // zh-CN
"|국가|나라" // ko-KR
"|کشور"; // fa
const char kCountryLocationRe[] = "location";
const char kZipCodeRe[] =
"zip|postal|post.*code|pcode"
"|pin.?code" // en-IN
"|postleitzahl" // de-DE
"|\\bcp\\b" // es
"|\\bcdp\\b" // fr-FR
"|\\bcap\\b" // it-IT
"|郵便番号" // ja-JP
"|codigo|codpos|\\bcep\\b" // pt-BR, pt-PT
"|Почтовый.?Индекс" // ru
"|पिन.?कोड" // hi
"|邮政编码|邮编" // zh-CN
"|郵遞區號" // zh-TW
"|우편.?번호"; // ko-KR
const char kZip4Re[] =
"zip|^-$|post2"
"|codpos2"; // pt-BR, pt-PT
const char kCityRe[] =
"city|town"
"|\\bort\\b|stadt" // de-DE
"|suburb" // en-AU
"|ciudad|provincia|localidad|poblacion" // es
"|ville|commune" // fr-FR
"|localita" // it-IT
"|市区町村" // ja-JP
"|cidade" // pt-BR, pt-PT
"|Город" // ru
"|市" // zh-CN
"|分區" // zh-TW
"|شهر" // fa
"|शहर" // hi for city
"|ग्राम|गाँव" // hi for village
"|^시[^도·・]|시[·・]?군[·・]?구"; // ko-KR
const char kStateRe[] =
"(?<!(united|hist|history).?)state|county|region|province"
"|county|principality" // en-UK
"|都道府県" // ja-JP
"|estado|provincia" // pt-BR, pt-PT
"|область" // ru
"|省" // zh-CN
"|地區" // zh-TW
"|استان" // fa
"|राज्य" // hi
"|^시[·・]?도"; // ko-KR
/////////////////////////////////////////////////////////////////////////////
// search_field.cc
/////////////////////////////////////////////////////////////////////////////
const char kSearchTermRe[] =
"^q$"
"|search"
"|query"
"|qry"
"|suche.*" // de-DE
"|搜索" // zh-CN zh-TW
"|探す|検索" // ja-JP to search
"|recherch.*" // fr-FR
"|busca" // pt-BR, pt-PT
"|جستجو" // fa
"|искать|найти|поиск"; // ru
/////////////////////////////////////////////////////////////////////////////
// field_price.cc
/////////////////////////////////////////////////////////////////////////////
const char kPriceRe[] =
"\\bprice\\b|\\brate\\b|\\bcost\\b"
"|قیمة‎|سعر‎" // ar
"|قیمت" // fa
"|\\bprix\\b|\\bcoût\\b|\\bcout\\b|\\btarif\\b"; // fr-CA
/////////////////////////////////////////////////////////////////////////////
// credit_card_field.cc
/////////////////////////////////////////////////////////////////////////////
const char kNameOnCardRe[] =
"card.?(?:holder|owner)|name.*(\\b)?on(\\b)?.*card"
"|(?:card|cc).?name|cc.?full.?name"
"|karteninhaber" // de-DE
"|nombre.*tarjeta" // es
"|nom.*carte" // fr-FR
"|nome.*cart" // it-IT
"|名前" // ja-JP
"|Имя.*карты" // ru
"|信用卡开户名|开户名|持卡人姓名" // zh-CN
"|持卡人姓名"; // zh-TW
const char kNameOnCardContextualRe[] = "name";
const char kCardNumberRe[] =
"(add)?(?:card|cc|acct).?(?:number|#|no|num|field)"
"|(?<!telefon|haus)nummer" // de-DE
"|カード番号" // ja-JP
"|Номер.*карты" // ru
"|信用卡号|信用卡号码" // zh-CN
"|信用卡卡號" // zh-TW
"|카드" // ko-KR
"|(numero|número|numéro)(?!.*(document|fono|phone))"; // es/pt/fr
const char kCardCvcRe[] =
"verification|card.?identification|security.?code|card.?code"
"|security.?value"
"|security.?number|card.?pin|c-v-v"
"|(cvn|cvv|cvc|csc|cvd|cid|ccv)(field)?"
"|\\bcid\\b";
// "Expiration date" is the most common label here, but some pages have
// "Expires", "exp. date" or "exp. month" and "exp. year". We also look
// for the field names ccmonth and ccyear, which appear on at least 4 of
// our test pages.
// On at least one page (The China Shop2.html) we find only the labels
// "month" and "year". So for now we match these words directly; we'll
// see if this turns out to be too general.
// Toolbar Bug 51451: indeed, simply matching "month" is too general for
// https://rps.fidelity.com/ftgw/rps/RtlCust/CreatePIN/Init.
// Instead, we match only words beginning with "month".
const char kExpirationMonthRe[] =
"expir|exp.*mo|exp.*date|ccmonth|cardmonth|addmonth"
"|gueltig|gültig|monat" // de-DE
"|fecha" // es
"|date.*exp" // fr-FR
"|scadenza" // it-IT
"|有効期限" // ja-JP
"|validade" // pt-BR, pt-PT
"|Срок действия карты" // ru
"|月"; // zh-CN
const char kExpirationYearRe[] =
"exp|^/|(add)?year"
"|ablaufdatum|gueltig|gültig|jahr" // de-DE
"|fecha" // es
"|scadenza" // it-IT
"|有効期限" // ja-JP
"|validade" // pt-BR, pt-PT
"|Срок действия карты" // ru
"|年|有效期"; // zh-CN
// Used to match a expiration date field with a two digit year.
// The following conditions must be met:
// - Exactly two adjacent y's.
// - (optional) Exactly two adjacent m's before the y's.
// - (optional) Separated by white-space and/or a dash or slash.
// - (optional) Prepended with some text similar to "Expiration Date".
// Tested in components/autofill/core/common/autofill_regexes_unittest.cc
const char kExpirationDate2DigitYearRe[] =
"(?:exp.*date[^y\\n\\r]*|mm\\s*[-/]?\\s*)yy(?:[^y]|$)";
// Used to match a expiration date field with a four digit year.
// Same requirements as |kExpirationDate2DigitYearRe| except:
// - Exactly four adjacent y's.
// Tested in components/autofill/core/common/autofill_regexes_unittest.cc
const char kExpirationDate4DigitYearRe[] =
"(?:exp.*date[^y\\n\\r]*|mm\\s*[-/]?\\s*)yyyy(?:[^y]|$)";
// Used to match expiration date fields that do not specify a year length.
const char kExpirationDateRe[] =
"expir|exp.*date|^expfield$"
"|gueltig|gültig" // de-DE
"|fecha" // es
"|date.*exp" // fr-FR
"|scadenza" // it-IT
"|有効期限" // ja-JP
"|validade" // pt-BR, pt-PT
"|Срок действия карты"; // ru
const char kGiftCardRe[] = "gift.?card";
const char kDebitGiftCardRe[] =
"(?:visa|mastercard|discover|amex|american express).*gift.?card";
const char kDebitCardRe[] = "debit.*card";
/////////////////////////////////////////////////////////////////////////////
// email_field.cc
/////////////////////////////////////////////////////////////////////////////
const char kEmailRe[] =
"e.?mail"
"|courriel" // fr
"|correo.*electr(o|ó)nico" // es-ES
"|メールアドレス" // ja-JP
"|Электронной.?Почты" // ru
"|邮件|邮箱" // zh-CN
"|電郵地址" // zh-TW
"|ایمیل|پست.*الکترونیک" // fa
"|ईमेल|इलॅक्ट्रॉनिक.?मेल" // hi
"|(?:이메일|전자.?우편|[Ee]-?mail)(.?주소)?"; // ko-KR
/////////////////////////////////////////////////////////////////////////////
// name_field.cc
/////////////////////////////////////////////////////////////////////////////
const char kNameIgnoredRe[] =
"user.?name|user.?id|nickname|maiden name|title|prefix|suffix"
"|vollständiger.?name" // de-DE
"|用户名" // zh-CN
"|(?:사용자.?)?아이디|사용자.?ID"; // ko-KR
const char kNameRe[] =
"^name|full.?name|your.?name|customer.?name|bill.?name|ship.?name"
"|name.*first.*last|firstandlastname"
"|nombre.*y.*apellidos" // es
"|^nom(?!bre)" // fr-FR
"|お名前|氏名" // ja-JP
"|^nome" // pt-BR, pt-PT
"|نام.*نام.*خانوادگی" // fa
"|姓名" // zh-CN
"|성명"; // ko-KR
const char kNameSpecificRe[] =
"^name"
"|^nom" // fr-FR
"|^nome"; // pt-BR, pt-PT
const char kFirstNameRe[] =
"first.*name|initials|fname|first$|given.*name"
"|vorname" // de-DE
"|nombre" // es
"|forename|prénom|prenom" // fr-FR
"|名" // ja-JP
"|nome" // pt-BR, pt-PT
"|Имя" // ru
"|نام" // fa
"|이름" // ko-KR
"|^नाम"; // hi
const char kMiddleInitialRe[] = "middle.*initial|m\\.i\\.|mi$|\\bmi\\b";
const char kMiddleNameRe[] =
"middle.*name|mname|middle$"
"|apellido.?materno|lastlastname"; // es
// TODO(crbug.com/928851): Revisit "morada" from pt-PT as it means address and
// not "last name", and "surename" in pt-PT as it's not Portuguese (or any
// language?).
const char kLastNameRe[] =
"last.*name|lname|surname|last$|secondname|family.*name"
"|nachname" // de-DE
"|apellidos?" // es
"|famille|^nom(?!bre)" // fr-FR
"|cognome" // it-IT
"|姓" // ja-JP
"|morada|apelidos|surename|sobrenome" // pt-BR, pt-PT
"|Фамилия" // ru
"|نام.*خانوادگی" // fa
"|उपनाम" // hi
"|\\b성(?:[^명]|\\b)"; // ko-KR
/////////////////////////////////////////////////////////////////////////////
// phone_field.cc
/////////////////////////////////////////////////////////////////////////////
const char kPhoneRe[] =
"phone|mobile|contact.?number"
"|telefonnummer" // de-DE
"|telefono|teléfono" // es
"|telfixe" // fr-FR
"|電話" // ja-JP
"|telefone|telemovel" // pt-BR, pt-PT
"|телефон" // ru
"|मोबाइल" // hi for mobile
"|电话" // zh-CN
"|(?:전화|핸드폰|휴대폰|휴대전화)(?:.?번호)?"; // ko-KR
const char kCountryCodeRe[] =
"country.*code|ccode|_cc|phone.*code|user.*phone.*code";
const char kAreaCodeNotextRe[] = "^\\($";
const char kAreaCodeRe[] =
"area.*code|acode|area"
"|지역.?번호"; // ko-KR
const char kPhonePrefixSeparatorRe[] = "^-$|^\\)$";
const char kPhoneSuffixSeparatorRe[] = "^-$";
const char kPhonePrefixRe[] =
"prefix|exchange"
"|preselection" // fr-FR
"|ddd"; // pt-BR, pt-PT
const char kPhoneSuffixRe[] = "suffix";
const char kPhoneExtensionRe[] =
"\\bext|ext\\b|extension"
"|ramal"; // pt-BR, pt-PT
/////////////////////////////////////////////////////////////////////////////
// travel_field.cc
/////////////////////////////////////////////////////////////////////////////
const char kPassportRe[] =
"document.*number|passport" // en-US
"|passeport" // fr-FR
"|numero.*documento|pasaporte" // es-ES
"|書類"; // ja-JP
const char kTravelOriginRe[] =
"point.*of.*entry|arrival" // en-US
"|punto.*internaci(o|ó)n|fecha.*llegada" // es-ES
"|入国"; // ja-JP
const char kTravelDestinationRe[] =
"departure" // en-US
"|fecha.*salida|destino" // es-ES
"|出国"; // ja-JP
const char kFlightRe[] =
"airline|flight" // en-US
"|aerol(i|í)nea|n(u|ú)mero.*vuelo" // es-ES
"|便名|航空会社"; // ja-JP
/////////////////////////////////////////////////////////////////////////////
// validation.cc
/////////////////////////////////////////////////////////////////////////////
const char kUPIVirtualPaymentAddressRe[] =
"^\\w+@("
"airtel|" // My Airtel-Recharge, Bill, Bank
"allbank|" // Allahabad Bank UPI
"andb|" // Andhra Bank ONE
"axisbank|" // Axis Pay
"axisgo|" // Ola
"barodampay|" // Baroda MPay
"boi|" // BHIM BOI UPI
"centralbank|" // Cent UPI
"cnrb|" // Canara Bank UPI - Empower
"csbpay|" // CSB UPI
"dbs|" // digibank by DBS
"dcb|" // DCB Bank
"denabank|" // Dena Bank E-UPI
"fbl|" // Cointab
"federal|" // Lotza
"hdfcbank|" // HDFC Bank MobileBanking
"hsbc|" // HSBC Simply Pay
"icici|" // Pockets- ICICI Bank
"idbi|" // PayWiz
"idfcbank|" // IDFC Bank UPI App
"indianbank|" // Indian Bank UPI
"indus|" // Indus Pay
"iob|" // IOB UPI
"jkb|" // BHIM JK Bank UPI
"jsb|" // JetPay UPI
"kaypay|" // KayPay
"kbl|" // KBL Smartz
"kotak|" // kotak Mahindra Bank
"kvb|" // KVB Upay
"lvb|" // LVB UPay
"mahb|" // MAHAUPI
"obc|" // Oriental BHIM UPI
"okicici|" // Tez
"okhdfcbank|" // Tez
"okaxis|" // Tez
"paytm|" // Paytm
"pingpay|" // Samsung Pay
"pnb|" // PNB UPI
"pockets|" // Pockets- ICICI Bank
"psb|" // PSB UPI App
"rbl|" // RBL Pay
"sbi|" // SBI Pay
"scb|" // Standard Chartered
"sib|" // SIB M-Pay (UPI Pay)
"syndicate|" // Synd UPI
"tjsb|" // TranZapp
"ubi|" // United UPI
"uboi|" // Union Bank UPI
"uco|" // UCO UPI
"unionbank|" // Union Bank UPI
"united|" // United UPI
"upi|" // BHIM Bharat Interface for Money
"utbi|" // United UPI
"vijb|" // Vijaya UPI App
"ybl|" // Yes Pay
"yesbank" // NuPay
")$";
/////////////////////////////////////////////////////////////////////////////
// form_structure.cc
/////////////////////////////////////////////////////////////////////////////
const char kUrlSearchActionRe[] = "/search(/|((\\w*\\.\\w+)?$))";
} // namespace autofill