forked from mirrors/gecko-dev
MozReview-Commit-ID: KXU4jHxhRuH --HG-- extra : rebase_source : 51aa36fc73345e045db0a3351233170e77b13241
267 lines
9.6 KiB
JavaScript
267 lines
9.6 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
/*
|
|
* Form Autofill field Heuristics RegExp.
|
|
*/
|
|
|
|
/* exported HeuristicsRegExp */
|
|
|
|
"use strict";
|
|
|
|
var HeuristicsRegExp = {
|
|
// These regular expressions are from Chromium source codes [1]. Most of them
|
|
// converted to JS format have the same meaning with the original ones except
|
|
// the first line of "address-level1".
|
|
// [1] https://cs.chromium.org/chromium/src/components/autofill/core/browser/autofill_regex_constants.cc
|
|
RULES: {
|
|
// ==== Email ====
|
|
"email": new RegExp(
|
|
"e.?mail" +
|
|
"|courriel" + // fr
|
|
"|メールアドレス" + // ja-JP
|
|
"|Электронной.?Почты" + // ru
|
|
"|邮件|邮箱" + // zh-CN
|
|
"|電郵地址" + // zh-TW
|
|
"|(?:이메일|전자.?우편|[Ee]-?mail)(.?주소)?", // ko-KR
|
|
"iu"
|
|
),
|
|
|
|
// ==== Telephone ====
|
|
"tel-extension": new RegExp(
|
|
"\\bext|ext\\b|extension" +
|
|
"|ramal", // pt-BR, pt-PT
|
|
"iu"
|
|
),
|
|
"tel": new RegExp(
|
|
"phone|mobile|contact.?number" +
|
|
"|telefonnummer" + // de-DE
|
|
"|telefono|teléfono" + // es
|
|
"|telfixe" + // fr-FR
|
|
"|電話" + // ja-JP
|
|
"|telefone|telemovel" + // pt-BR, pt-PT
|
|
"|телефон" + // ru
|
|
"|电话" + // zh-CN
|
|
"|(?:전화|핸드폰|휴대폰|휴대전화)(?:.?번호)?", // ko-KR
|
|
"iu"
|
|
),
|
|
|
|
// ==== Address Fields ====
|
|
"organization": new RegExp(
|
|
"company|business|organization|organisation" +
|
|
"|firma|firmenname" + // de-DE
|
|
"|empresa" + // es
|
|
"|societe|société" + // fr-FR
|
|
"|ragione.?sociale" + // it-IT
|
|
"|会社" + // ja-JP
|
|
"|название.?компании" + // ru
|
|
"|单位|公司" + // zh-CN
|
|
"|회사|직장", // ko-KR
|
|
"iu"
|
|
),
|
|
"street-address": new RegExp(
|
|
"streetaddress|street-address",
|
|
"iu"
|
|
),
|
|
"address-line1": new RegExp(
|
|
"^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
|
|
"iu"
|
|
),
|
|
"address-line2": new RegExp(
|
|
"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
|
|
"iu"
|
|
),
|
|
"address-line3": new RegExp(
|
|
"address[_-]?line(3|three)|address3|addr3|street|suite|unit" +
|
|
"|adresszusatz|ergänzende.?angaben" + // de-DE
|
|
"|direccion3|colonia|adicional" + // es
|
|
"|addresssuppl|complementnom|appartement" + // fr-FR
|
|
"|indirizzo3" + // it-IT
|
|
"|住所3" + // ja-JP
|
|
"|complemento|addrcomplement" + // pt-BR, pt-PT
|
|
"|Улица" + // ru
|
|
"|地址3" + // zh-CN
|
|
"|주소.?3", // ko-KR
|
|
"iu"
|
|
),
|
|
"address-level2": new RegExp(
|
|
"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
|
|
"|^시[^도·・]|시[·・]?군[·・]?구", // ko-KR
|
|
"iu"
|
|
),
|
|
"address-level1": new RegExp(
|
|
// JS does not support backward matching, so the following pattern is
|
|
// applied in FormAutofillHeuristics.getInfo() rather than regexp.
|
|
// "(?<!united )state|county|region|province"
|
|
"state|county|region|province" +
|
|
"|land" + // de-DE
|
|
"|county|principality" + // en-UK
|
|
"|都道府県" + // ja-JP
|
|
"|estado|provincia" + // pt-BR, pt-PT
|
|
"|область" + // ru
|
|
"|省" + // zh-CN
|
|
"|地區" + // zh-TW
|
|
"|^시[·・]?도", // ko-KR
|
|
"iu"
|
|
),
|
|
"postal-code": new RegExp(
|
|
"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
|
|
"|邮政编码|邮编" + // zh-CN
|
|
"|郵遞區號" + // zh-TW
|
|
"|우편.?번호", // ko-KR
|
|
"iu"
|
|
),
|
|
"country": new RegExp(
|
|
"country|countries" +
|
|
"|país|pais" + // es
|
|
"|国" + // ja-JP
|
|
"|国家" + // zh-CN
|
|
"|국가|나라", // ko-KR
|
|
"iu"
|
|
),
|
|
|
|
// ==== Name Fields ====
|
|
"name": new RegExp(
|
|
"^name|full.?name|your.?name|customer.?name|bill.?name|ship.?name" +
|
|
"|name.*first.*last|firstandlastname" +
|
|
"|nombre.*y.*apellidos" + // es
|
|
"|^nom" + // fr-FR
|
|
"|お名前|氏名" + // ja-JP
|
|
"|^nome" + // pt-BR, pt-PT
|
|
"|姓名" + // zh-CN
|
|
"|성명", // ko-KR
|
|
"iu"
|
|
),
|
|
"given-name": new RegExp(
|
|
"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
|
|
"|이름", // ko-KR
|
|
"iu"
|
|
),
|
|
"additional-name": new RegExp(
|
|
"middle.*name|mname|middle$" +
|
|
"|apellido.?materno|lastlastname" + // es
|
|
|
|
// This rule is for middle initial.
|
|
"middle.*initial|m\\.i\\.|mi$|\\bmi\\b",
|
|
"iu"
|
|
),
|
|
"family-name": new RegExp(
|
|
"last.*name|lname|surname|last$|secondname|family.*name" +
|
|
"|nachname" + // de-DE
|
|
"|apellido" + // es
|
|
"|famille|^nom" + // fr-FR
|
|
"|cognome" + // it-IT
|
|
"|姓" + // ja-JP
|
|
"|morada|apelidos|surename|sobrenome" + // pt-BR, pt-PT
|
|
"|Фамилия" + // ru
|
|
"|\\b성(?:[^명]|\\b)", // ko-KR
|
|
"iu"
|
|
),
|
|
|
|
// ==== Credit Card Fields ====
|
|
"cc-name": new RegExp(
|
|
"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
|
|
"iu"
|
|
),
|
|
"cc-number": new RegExp(
|
|
"(add)?(?:card|cc|acct).?(?:number|#|no|num|field)" +
|
|
"|nummer" + // de-DE
|
|
"|credito|numero|número" + // es
|
|
"|numéro" + // fr-FR
|
|
"|カード番号" + // ja-JP
|
|
"|Номер.*карты" + // ru
|
|
"|信用卡号|信用卡号码" + // zh-CN
|
|
"|信用卡卡號" + // zh-TW
|
|
"|카드", // ko-KR
|
|
"iu"
|
|
),
|
|
"cc-exp-month": new RegExp(
|
|
"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,
|
|
"iu"
|
|
),
|
|
"cc-exp-year": new RegExp(
|
|
"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
|
|
"iu"
|
|
),
|
|
"cc-exp": new RegExp(
|
|
"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
|
|
"iu"
|
|
),
|
|
},
|
|
};
|