From 90b0d3b114e749809d7b24cd4c54f7517c251b61 Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Tue, 15 Mar 2022 18:47:17 +0100 Subject: [PATCH 01/19] feat(form-core): allow [label-sr-only] on FormControl --- packages/form-core/src/FormControlMixin.js | 21 +++++++++++ .../form-core/test/FormControlMixin.test.js | 37 +++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/packages/form-core/src/FormControlMixin.js b/packages/form-core/src/FormControlMixin.js index 21eb8b63a..7b5d18311 100644 --- a/packages/form-core/src/FormControlMixin.js +++ b/packages/form-core/src/FormControlMixin.js @@ -43,6 +43,7 @@ const FormControlMixinImplementation = superclass => name: { type: String, reflect: true }, readOnly: { type: Boolean, attribute: 'readonly', reflect: true }, label: String, // FIXME: { attribute: false } breaks a bunch of tests, but shouldn't... + labelSrOnly: { type: Boolean, attribute: 'label-sr-only', reflect: true }, helpText: { type: String, attribute: 'help-text' }, modelValue: { attribute: false }, _ariaLabelledNodes: { attribute: false }, @@ -186,6 +187,12 @@ const FormControlMixinImplementation = superclass => */ this.label = ''; + /** + * The label will only be visible for srceen readers when true + * @type {boolean} + */ + this.labelSrOnly = false; + /** * The helpt text for the input node. * When no value is defined, textContent of [slot=help-text] will be used @@ -699,6 +706,20 @@ const FormControlMixinImplementation = superclass => color: var(--disabled-text-color, #767676); } + :host([label-sr-only]) .form-field__label { + position: absolute; + top: 0; + width: 1px; + height: 1px; + overflow: hidden; + clip-path: inset(100%); + clip: rect(1px, 1px, 1px, 1px); + white-space: nowrap; + border: 0; + margin: 0; + padding: 0; + } + /*********************** {block} .input-group *********************/ diff --git a/packages/form-core/test/FormControlMixin.test.js b/packages/form-core/test/FormControlMixin.test.js index bbc5e373b..df18d36b8 100644 --- a/packages/form-core/test/FormControlMixin.test.js +++ b/packages/form-core/test/FormControlMixin.test.js @@ -80,6 +80,43 @@ describe('FormControlMixin', () => { expect(el.label).to.equal(''); }); + /** + * N.B. For platform controls, the same would be achieved with + * However, since FormControl is usually not the activeElement (_inputNode is), this + * will not have the desired effect on for instance lion-input + */ + it('supports "label-sr-only" to make label visually hidden, but accessible for screen reader users', async () => { + const el = /** @type {FormControlMixinClass} */ ( + await fixture(html` + <${tag} label-sr-only> + + ${inputSlot} + `) + ); + + const expectedValues = { + position: 'absolute', + top: '0px', + width: '1px', + height: '1px', + overflow: 'hidden', + clipPath: 'inset(100%)', + clip: 'rect(1px, 1px, 1px, 1px)', + whiteSpace: 'nowrap', + borderWidth: '0px', + margin: '0px', + padding: '0px', + }; + + const labelStyle = window.getComputedStyle( + // @ts-ignore + el.shadowRoot?.querySelector('.form-field__label'), + ); + Object.entries(expectedValues).forEach(([key, val]) => { + expect(labelStyle[key]).to.equal(val); + }); + }); + it('can have a help-text', async () => { const elAttr = /** @type {FormControlMixinClass} */ ( await fixture(html` From 9c1dfdcd1272774af700fefe32687c75e95fb296 Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Tue, 15 Mar 2022 18:54:10 +0100 Subject: [PATCH 02/19] feat(form-core): add live formatter functionality via .preprocessor --- .changeset/four-avocados-confess.md | 5 ++ .../systems/form/formatting-and-parsing.md | 52 ++++++++++++++ packages/form-core/src/FormatMixin.js | 71 +++++++++++++++---- .../test-suites/FormatMixin.suite.js | 71 ++++++++++++++----- 4 files changed, 167 insertions(+), 32 deletions(-) create mode 100644 .changeset/four-avocados-confess.md diff --git a/.changeset/four-avocados-confess.md b/.changeset/four-avocados-confess.md new file mode 100644 index 000000000..46a136368 --- /dev/null +++ b/.changeset/four-avocados-confess.md @@ -0,0 +1,5 @@ +--- +'@lion/form-core': patch +--- + +FormControl: allow a label-sr-only flag to provide visually hidden labels diff --git a/docs/docs/systems/form/formatting-and-parsing.md b/docs/docs/systems/form/formatting-and-parsing.md index f0f11f7e6..3b30eec9f 100644 --- a/docs/docs/systems/form/formatting-and-parsing.md +++ b/docs/docs/systems/form/formatting-and-parsing.md @@ -4,6 +4,8 @@ import { html } from '@mdjs/mdjs-preview'; import '@lion/input/define'; import { Unparseable } from '@lion/form-core'; +import { liveFormatPhoneNumber } from '@lion/input-tel'; +import { Unparseable } from '@lion/form-core'; import './assets/h-output.js'; ``` @@ -171,6 +173,56 @@ export const preprocessors = () => { }; ``` +### Live formatters + +Live formatters are a specific type of preprocessor, that format a view value during typing. +Examples: + +- a phone number that, during typing formats `+316` as `+31 6` +- a date that follows a date mask and automatically inserts '-' characters + +Type '6' in the example below and see that a space will be added and the caret in the text box +will be automatically moved along. + +```js preview-story +export const liveFormatters = () => { + return html` + { + return liveFormatPhoneNumber(viewValue, { + regionCode: 'NL', + formatStrategy: 'international', + currentCaretIndex, + prevViewValue, + }); + }} + > + + `; +}; +``` + +Note that these live formatters need to make an educated guess based on the current (incomplete) view +value what the users intentions are. When implemented correctly, they can create a huge improvement +in user experience. +Next to a changed viewValue, they are also responsible for taking care of the +caretIndex. For instance, if `+316` is changed to `+31 6`, the caret needs to be moved one position +to the right (to compensate for the extra inserted space). + +#### When to use a live formatter and when a regular formatter? + +Although it might feel more logical to configure live formatters inside the `.formatter` function, +it should be configured inside the `.preprocessor` function. The table below shows differences +between the two mentioned methods + +| Function | Value type recieved | Reflected back to user on | Supports incomplete values | Supports caret index | +| :------------ | :------------------ | :------------------------ | :------------------------- | :------------------- | +| .formatter | modelValue | blur (leave) | No | No | +| .preprocessor | viewValue | keyup (live) | Yes | Yes | + ## Flow Diagrams Below we show three flow diagrams to show the flow of formatting, serializing and parsing user input, with the example of a date input: diff --git a/packages/form-core/src/FormatMixin.js b/packages/form-core/src/FormatMixin.js index 62ce2f2e8..ff1d1db2d 100644 --- a/packages/form-core/src/FormatMixin.js +++ b/packages/form-core/src/FormatMixin.js @@ -7,7 +7,7 @@ import { ValidateMixin } from './validate/ValidateMixin.js'; /** * @typedef {import('../types/FormatMixinTypes').FormatMixin} FormatMixin - * @typedef {import('@lion/localize/types/LocalizeMixinTypes').FormatNumberOptions} FormatOptions + * @typedef {import('../types/FormatMixinTypes').FormatOptions} FormatOptions * @typedef {import('../types/FormControlMixinTypes.js').ModelValueEventDetails} ModelValueEventDetails */ @@ -107,20 +107,26 @@ const FormatMixinImplementation = superclass => } /** - * Preprocesses the viewValue before it's parsed to a modelValue. Can be used to filter - * invalid input amongst others. + * Preprocessors could be considered 'live formatters'. Their result is shown to the user + * on keyup instead of after blurring the field. The biggest difference between preprocessors + * and formatters is their moment of execution: preprocessors are run before modelValue is + * computed (and work based on view value), whereas formatters are run after the parser (and + * are based on modelValue) + * Automatically formats code while typing. It depends on a preprocessro that smartly + * updates the viewValue and caret position for best UX. * @example * ```js * preprocessor(viewValue) { * // only use digits * return viewValue.replace(/\D/g, ''); * } - * ``` * @param {string} v - the raw value from the after keyUp/Down event - * @returns {string} preprocessedValue: the result of preprocessing for invalid input + * @param {FormatOptions & { prevViewValue: string; currentCaretIndex: number }} opts - the raw value from the after keyUp/Down event + * @returns {{ viewValue:string; caretIndex:number; }|string|undefined} preprocessedValue: the result of preprocessing for invalid input */ - preprocessor(v) { - return v; + // eslint-disable-next-line no-unused-vars + preprocessor(v, opts) { + return undefined; } /** @@ -204,6 +210,7 @@ const FormatMixinImplementation = superclass => } this._reflectBackFormattedValueToUser(); this.__preventRecursiveTrigger = false; + this.__prevViewValue = this.value; } /** @@ -218,13 +225,12 @@ const FormatMixinImplementation = superclass => if (value === '') { // Ideally, modelValue should be undefined for empty strings. // For backwards compatibility we return an empty string: - // - it triggers validation for required validators (see ValidateMixin.validate()) // - it can be expected by 3rd parties (for instance unit tests) // TODO(@tlouisse): In a breaking refactor of the Validation System, this behavior can be corrected. return ''; } - // A.2) Handle edge cases We might have no view value yet, for instance because + // A.2) Handle edge cases. We might have no view value yet, for instance because // _inputNode.value was not available yet if (typeof value !== 'string') { // This means there is nothing to find inside the view that can be of @@ -263,8 +269,7 @@ const FormatMixinImplementation = superclass => if ( this._isHandlingUserInput && - this.hasFeedbackFor && - this.hasFeedbackFor.length && + this.hasFeedbackFor?.length && this.hasFeedbackFor.includes('error') && this._inputNode ) { @@ -282,6 +287,8 @@ const FormatMixinImplementation = superclass => } /** + * Responds to modelValue changes in the synchronous cycle (most subclassers should listen to + * the asynchronous cycle ('modelValue' in the .updated lifecycle)) * @param {{ modelValue: unknown; }[]} args * @protected */ @@ -320,7 +327,7 @@ const FormatMixinImplementation = superclass => */ _syncValueUpwards() { if (!this.__isHandlingComposition) { - this.value = this.preprocessor(this.value); + this.__handlePreprocessor(); } const prevFormatted = this.formattedValue; this.modelValue = this._callParser(this.value); @@ -330,8 +337,36 @@ const FormatMixinImplementation = superclass => if (prevFormatted === this.formattedValue && this.__prevViewValue !== this.value) { this._calculateValues(); } - /** @type {string} */ - this.__prevViewValue = this.value; + } + + /** + * Handle view value and caretIndex, depending on return type of .preprocessor. + * @private + */ + __handlePreprocessor() { + const unprocessedValue = this.value; + const preprocessedValue = this.preprocessor(this.value, { + ...this.formatOptions, + currentCaretIndex: this._inputNode?.selectionStart || this.value.length, + prevViewValue: this.__prevViewValue, + }); + + this.__prevViewValue = unprocessedValue; + if (preprocessedValue === undefined) { + // Make sure we do no set back original value, so we preserve + // caret index (== selectionStart/selectionEnd) + return; + } + if (typeof preprocessedValue === 'string') { + this.value = preprocessedValue; + } else if (typeof preprocessedValue === 'object') { + const { viewValue, caretIndex } = preprocessedValue; + this.value = viewValue; + if (caretIndex && this._inputNode && 'selectionStart' in this._inputNode) { + this._inputNode.selectionStart = caretIndex; + this._inputNode.selectionEnd = caretIndex; + } + } } /** @@ -351,7 +386,7 @@ const FormatMixinImplementation = superclass => /** * Every time .formattedValue is attempted to sync to the view value (on change/blur and on * modelValue change), this condition is checked. When enhancing it, it's recommended to - * call `super._reflectBackOn()` + * call via `return this._myExtraCondition && super._reflectBackOn()` * @overridable * @return {boolean} * @protected @@ -490,6 +525,9 @@ const FormatMixinImplementation = superclass => }; } + /** + * @private + */ __onPaste() { this._isPasting = true; this.formatOptions.mode = 'pasted'; @@ -510,6 +548,9 @@ const FormatMixinImplementation = superclass => if (typeof this.modelValue === 'undefined') { this._syncValueUpwards(); } + /** @type {string} */ + this.__prevViewValue = this.value; + this._reflectBackFormattedValueToUser(); if (this._inputNode) { diff --git a/packages/form-core/test-suites/FormatMixin.suite.js b/packages/form-core/test-suites/FormatMixin.suite.js index 7bfa1c144..c09a6ee32 100644 --- a/packages/form-core/test-suites/FormatMixin.suite.js +++ b/packages/form-core/test-suites/FormatMixin.suite.js @@ -4,7 +4,7 @@ import { aTimeout, defineCE, expect, fixture, html, unsafeStatic } from '@open-w import sinon from 'sinon'; import { Unparseable, Validator } from '../index.js'; import { FormatMixin } from '../src/FormatMixin.js'; -import { getFormControlMembers } from '../test-helpers/getFormControlMembers.js'; +import { getFormControlMembers, mimicUserInput } from '../test-helpers/index.js'; /** * @typedef {import('../types/FormControlMixinTypes').FormControlHost} FormControlHost @@ -34,22 +34,6 @@ class FormatClass extends FormatMixin(LitElement) { } } -/** - * @param {FormatClass} formControl - * @param {?} newViewValue - * @param {{caretIndex?:number}} config - */ -function mimicUserInput(formControl, newViewValue, { caretIndex } = {}) { - formControl.value = newViewValue; // eslint-disable-line no-param-reassign - if (caretIndex) { - // eslint-disable-next-line no-param-reassign - formControl._inputNode.selectionStart = caretIndex; - // eslint-disable-next-line no-param-reassign - formControl._inputNode.selectionEnd = caretIndex; - } - formControl._inputNode.dispatchEvent(new Event('input', { bubbles: true })); -} - /** * @param {{tagString?: string, modelValueType?: modelValueType}} [customConfig] */ @@ -57,6 +41,7 @@ export function runFormatMixinSuite(customConfig) { const cfg = { tagString: null, childTagString: null, + modelValueType: String, ...customConfig, }; @@ -633,6 +618,58 @@ export function runFormatMixinSuite(customConfig) { _inputNode.dispatchEvent(new Event('compositionend', { bubbles: true })); expect(preprocessorSpy.callCount).to.equal(1); }); + + describe('Live Formatters', () => { + it('receives meta object with { prevViewValue: string; currentCaretIndex: number; }', async () => { + const spy = sinon.spy(); + + const valInitial = generateValueBasedOnType(); + const el = /** @type {FormatClass} */ ( + await fixture( + html`<${tag} .modelValue="${valInitial}" .preprocessor=${spy}>`, + ) + ); + const viewValInitial = el.value; + const valToggled = generateValueBasedOnType({ toggleValue: true }); + + mimicUserInput(el, valToggled, { caretIndex: 1 }); + expect(spy.args[0][0]).to.equal(el.value); + const formatOptions = spy.args[0][1]; + expect(formatOptions.prevViewValue).to.equal(viewValInitial); + expect(formatOptions.currentCaretIndex).to.equal(1); + }); + + it('updates return viewValue and caretIndex', async () => { + /** + * @param {string} viewValue + * @param {{ prevViewValue: string; currentCaretIndex: number; }} meta + */ + function myPreprocessor(viewValue, { currentCaretIndex }) { + return { viewValue: `${viewValue}q`, caretIndex: currentCaretIndex + 1 }; + } + const el = /** @type {FormatClass} */ ( + await fixture( + html`<${tag} .modelValue="${'xyz'}" .preprocessor=${myPreprocessor}>`, + ) + ); + mimicUserInput(el, 'wxyz', { caretIndex: 1 }); + expect(el._inputNode.value).to.equal('wxyzq'); + expect(el._inputNode.selectionStart).to.equal(2); + }); + + it('does not update when undefined is returned', async () => { + const el = /** @type {FormatClass} */ ( + await fixture( + html`<${tag} .modelValue="${'xyz'}" live-format .liveFormatter=${() => + undefined}>`, + ) + ); + mimicUserInput(el, 'wxyz', { caretIndex: 1 }); + expect(el._inputNode.value).to.equal('wxyz'); + // Make sure we do not put our already existing value back, because caret index would be lost + expect(el._inputNode.selectionStart).to.equal(1); + }); + }); }); }); }); From e457ce73bb4f9cf968bf8feadb970f9f8f5e864c Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Wed, 16 Mar 2022 10:03:05 +0100 Subject: [PATCH 03/19] chore: type and document Validator --- .../form-core/src/validate/types/index.d.ts | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 packages/form-core/src/validate/types/index.d.ts diff --git a/packages/form-core/src/validate/types/index.d.ts b/packages/form-core/src/validate/types/index.d.ts new file mode 100644 index 000000000..36741865a --- /dev/null +++ b/packages/form-core/src/validate/types/index.d.ts @@ -0,0 +1,60 @@ +import { FormControlHost } from '../../FormControlMixin'; +export { ValidationType } from '../../types/ValidateMixinTypes'; + +/** + * The name under which validation results get registered. For convience and predictability, this + * should always be the same as the constructor name (since it will be obfuscated in js builds, + * we need to provide it separately). + * @example + * ```js + * class MyValidator extends Validator { + * static validatorName = 'MyValidator'; + * // etc... + * } + * ``` + */ +export type ValidatorName = string; + +/** + * The first argument of the constructor, for instance 3 in `new MinLength(3)`. Will + * be stored on Validator instance and passed to `execute` function + */ +export type ValidatorParam = any; + +/** + * The second argument of the constructor, for instance + * `new MinLength(3, {getFeedbackMessage: async () => 'too long'})`. + * Will be stored on Validator instance and passed to `execute` function + */ +export type ValidatorConfig = { + getMessage?: (data: Partial) => Promise; + type?: ValidationType; + node?: FormControlHost; + fieldName?: string | Promise; +}; + +/** + * Output of the `execute` function that returns a validity outcome. When we need to shpw feedback, + * it should return true, otherwise false. So when an error\info|warning|success message + * needs to be shown, return true. + * It's also possible to return an enum. Let's say that a phone number can have multiple + * states: 'invalid-country-code' | 'too-long' | 'too-short' + * Those states can be retrieved in the getMessage function. + */ +export type ValidatorOutcome = string | boolean; + +/** + * Data object that will be provided to `getMessage()` method + */ +export type FeedbackMessageData = { + modelValue: any; + /** Value configured in FormControl.fieldName. Contributes to accessible error messages */ + fieldName: string; + name: ValidatorName; + formControl: FormControlHost; + type: ValidationType; + /* Outcome of Validator.execute function. Can be a boolean (true) or enum */ + outcome: ValidatorOutcome; + config: ValidatorConfig; + params: ValidatorParam; +}; From 7016a150dc9574daca7e9406f5d03f04769e1902 Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Wed, 16 Mar 2022 10:03:34 +0100 Subject: [PATCH 04/19] feat(form-core): allow enums as outcome of a Validator --- .changeset/proud-geese-suffer.md | 5 + .../form-core/src/validate/ValidateMixin.js | 156 +++++++----- packages/form-core/src/validate/Validator.js | 230 ++++++++++++------ .../test-suites/ValidateMixin.suite.js | 21 +- .../ValidateMixinFeedbackPart.suite.js | 112 ++++++--- 5 files changed, 341 insertions(+), 183 deletions(-) create mode 100644 .changeset/proud-geese-suffer.md diff --git a/.changeset/proud-geese-suffer.md b/.changeset/proud-geese-suffer.md new file mode 100644 index 000000000..4e373eac9 --- /dev/null +++ b/.changeset/proud-geese-suffer.md @@ -0,0 +1,5 @@ +--- +'@lion/form-core': minor +--- + +Validation: allow enums as outcome of a Validator diff --git a/packages/form-core/src/validate/ValidateMixin.js b/packages/form-core/src/validate/ValidateMixin.js index ea1883990..e768e9c8c 100644 --- a/packages/form-core/src/validate/ValidateMixin.js +++ b/packages/form-core/src/validate/ValidateMixin.js @@ -17,6 +17,10 @@ import { FormControlMixin } from '../FormControlMixin.js'; /** * @typedef {import('../../types/validate/ValidateMixinTypes').ValidateMixin} ValidateMixin * @typedef {import('../../types/validate/ValidateMixinTypes').ValidationType} ValidationType + * @typedef {import('../../types/validate/ValidateMixinTypes').ValidateHost} ValidateHost + * @typedef {typeof import('../../types/validate/ValidateMixinTypes').ValidateHost} ValidateHostConstructor + * @typedef {{validator:Validator; outcome:boolean|string}} ValidationResultEntry + * @typedef {{[type:string]: {[validatorName:string]:boolean|string}}} ValidationStates */ /** @@ -159,7 +163,7 @@ export const ValidateMixinImplementation = superclass => */ this.showsFeedbackFor = []; - // TODO: [v1] make this fully private (preifix __)? + // TODO: [v1] make this fully private (prefix __)? /** * A temporary storage to transition from hasFeedbackFor to showsFeedbackFor * @type {ValidationType[]} @@ -171,7 +175,7 @@ export const ValidateMixinImplementation = superclass => /** * The outcome of a validation 'round'. Keyed by ValidationType and Validator name * @readOnly - * @type {Object.>} + * @type {ValidationStates} */ this.validationStates = {}; @@ -206,44 +210,45 @@ export const ValidateMixinImplementation = superclass => /** * The amount of feedback messages that will visible in LionValidationFeedback + * @configurable * @protected */ this._visibleMessagesAmount = 1; /** - * @type {Validator[]} + * @type {ValidationResultEntry[]} * @private */ this.__syncValidationResult = []; /** - * @type {Validator[]} + * @type {ValidationResultEntry[]} * @private */ this.__asyncValidationResult = []; /** * Aggregated result from sync Validators, async Validators and ResultValidators - * @type {Validator[]} + * @type {ValidationResultEntry[]} * @private */ this.__validationResult = []; /** - * @type {Validator[]} + * @type {ValidationResultEntry[]} * @private */ this.__prevValidationResult = []; /** - * @type {Validator[]} + * @type {ValidationResultEntry[]} * @private */ this.__prevShownValidationResult = []; /** * The updated children validity affects the validity of the parent. Helper to recompute - * validatity of parent FormGroup + * validity of parent FormGroup * @private */ this.__childModelValueChanged = false; @@ -337,7 +342,7 @@ export const ValidateMixinImplementation = superclass => * Triggered by: * - modelValue change * - change in the 'validators' array - * - change in the config of an individual Validator + * - change in the config of an individual Validator * * Three situations are handled: * - a1) the FormControl is empty: further execution is halted. When the Required Validator @@ -384,6 +389,14 @@ export const ValidateMixinImplementation = superclass => * @desc step a1-3 + b (as explained in `validate()`) */ async __executeValidators() { + /** + * Allows Application Developer to wait for (async) validation + * @example + * ```js + * await el.validateComplete; + * ``` + * @type {Promise} + */ this.validateComplete = new Promise(resolve => { this.__validateCompleteResolve = resolve; }); @@ -410,7 +423,7 @@ export const ValidateMixinImplementation = superclass => const isEmpty = this.__isEmpty(value); if (isEmpty) { if (requiredValidator) { - this.__syncValidationResult = [requiredValidator]; + this.__syncValidationResult = [{ validator: requiredValidator, outcome: true }]; } this.__finishValidation({ source: 'sync' }); return; @@ -451,9 +464,12 @@ export const ValidateMixinImplementation = superclass => */ __executeSyncValidators(syncValidators, value, { hasAsync }) { if (syncValidators.length) { - this.__syncValidationResult = syncValidators.filter(v => - v.execute(value, v.param, { node: this }), - ); + this.__syncValidationResult = syncValidators + .map(v => ({ + validator: v, + outcome: /** @type {boolean|string} */ (v.execute(value, v.param, { node: this })), + })) + .filter(v => Boolean(v.outcome)); } this.__finishValidation({ source: 'sync', hasAsync }); } @@ -468,10 +484,15 @@ export const ValidateMixinImplementation = superclass => if (asyncValidators.length) { this.isPending = true; const resultPromises = asyncValidators.map(v => v.execute(value, v.param, { node: this })); - const booleanResults = await Promise.all(resultPromises); - this.__asyncValidationResult = booleanResults - .map((r, i) => asyncValidators[i]) // Create an array of Validators - .filter((v, i) => booleanResults[i]); // Only leave the ones returning true + const asyncExecutionResults = await Promise.all(resultPromises); + + this.__asyncValidationResult = asyncExecutionResults + .map((r, i) => ({ + validator: asyncValidators[i], + outcome: /** @type {boolean|string} */ (asyncExecutionResults[i]), + })) + .filter(v => Boolean(v.outcome)); + this.__finishValidation({ source: 'async' }); this.isPending = false; } @@ -479,7 +500,7 @@ export const ValidateMixinImplementation = superclass => /** * step b (as explained in `validate()`), called by __finishValidation - * @param {Validator[]} regularValidationResult result of steps 1-3 + * @param {{validator:Validator; outcome: boolean|string;}[]} regularValidationResult result of steps 1-3 * @private */ __executeResultValidators(regularValidationResult) { @@ -490,13 +511,21 @@ export const ValidateMixinImplementation = superclass => }) ); - return resultValidators.filter(v => - v.executeOnResults({ - regularValidationResult, - prevValidationResult: this.__prevValidationResult, - prevShownValidationResult: this.__prevShownValidationResult, - }), - ); + // Map everything to Validator[] for backwards compatibility + return resultValidators + .map(v => ({ + validator: v, + outcome: /** @type {boolean|string} */ ( + v.executeOnResults({ + regularValidationResult: regularValidationResult.map(entry => entry.validator), + prevValidationResult: this.__prevValidationResult.map(entry => entry.validator), + prevShownValidationResult: this.__prevShownValidationResult.map( + entry => entry.validator, + ), + }) + ), + })) + .filter(v => Boolean(v.outcome)); } /** @@ -512,35 +541,32 @@ export const ValidateMixinImplementation = superclass => const resultOutCome = this.__executeResultValidators(syncAndAsyncOutcome); this.__validationResult = [...resultOutCome, ...syncAndAsyncOutcome]; - // this._storeResultsOnInstance(this.__validationResult); - const ctor = - /** @type {typeof import('../../types/validate/ValidateMixinTypes').ValidateHost} */ ( - this.constructor - ); + const ctor = /** @type {ValidateHostConstructor} */ (this.constructor); - /** @type {Object.>} */ + /** @type {ValidationStates} */ const validationStates = ctor.validationTypes.reduce( (acc, type) => ({ ...acc, [type]: {} }), {}, ); - this.__validationResult.forEach(v => { - if (!validationStates[v.type]) { - validationStates[v.type] = {}; + this.__validationResult.forEach(({ validator, outcome }) => { + if (!validationStates[validator.type]) { + validationStates[validator.type] = {}; } - const vCtor = /** @type {typeof Validator} */ (v.constructor); - validationStates[v.type][vCtor.validatorName] = true; + const vCtor = /** @type {typeof Validator} */ (validator.constructor); + validationStates[validator.type][vCtor.validatorName] = outcome; }); this.validationStates = validationStates; - this.hasFeedbackFor = [...new Set(this.__validationResult.map(v => v.type))]; + this.hasFeedbackFor = [ + ...new Set(this.__validationResult.map(({ validator }) => validator.type)), + ]; /** private event that should be listened to by LionFieldSet */ this.dispatchEvent(new Event('validate-performed', { bubbles: true })); if (source === 'async' || !hasAsync) { if (this.__validateCompleteResolve) { - // @ts-ignore [allow-private] - this.__validateCompleteResolve(); + this.__validateCompleteResolve(true); } } } @@ -587,10 +613,7 @@ export const ValidateMixinImplementation = superclass => console.error(errorMessage, this); throw new Error(errorMessage); } - const ctor = - /** @type {typeof import('../../types/validate/ValidateMixinTypes').ValidateHost} */ ( - this.constructor - ); + const ctor = /** @type {ValidateHostConstructor} */ (this.constructor); if (ctor.validationTypes.indexOf(v.type) === -1) { const vCtor = /** @type {typeof Validator} */ (v.constructor); // throws in constructor are not visible to end user so we do both @@ -640,14 +663,14 @@ export const ValidateMixinImplementation = superclass => */ /** - * @param {Validator[]} validators list of objects having a .getMessage method + * @param {ValidationResultEntry[]} validationResults list of objects having a .getMessage method * @return {Promise.} * @private */ - async __getFeedbackMessages(validators) { + async __getFeedbackMessages(validationResults) { let fieldName = await this.fieldName; return Promise.all( - validators.map(async validator => { + validationResults.map(async ({ validator, outcome }) => { if (validator.config.fieldName) { fieldName = await validator.config.fieldName; } @@ -656,6 +679,7 @@ export const ValidateMixinImplementation = superclass => modelValue: this.modelValue, formControl: this, fieldName, + outcome, }); return { message, type: validator.type, validator }; }), @@ -690,10 +714,19 @@ export const ValidateMixinImplementation = superclass => if (this.showsFeedbackFor.length > 0) { this.__feedbackQueue.add(async () => { /** @type {Validator[]} */ - this.__prioritizedResult = this._prioritizeAndFilterFeedback({ - validationResult: this.__validationResult, + const prioritizedValidators = this._prioritizeAndFilterFeedback({ + validationResult: this.__validationResult.map(entry => entry.validator), }); + this.__prioritizedResult = prioritizedValidators + .map(v => { + const found = /** @type {ValidationResultEntry} */ ( + this.__validationResult.find(r => v === r.validator) + ); + return found; + }) + .filter(Boolean); + if (this.__prioritizedResult.length > 0) { this.__prevShownValidationResult = this.__prioritizedResult; } @@ -732,12 +765,12 @@ export const ValidateMixinImplementation = superclass => } /** - * Allows the end user to specify when a feedback message should be shown + * Allows the Application Developer to specify when a feedback message should be shown * @example * ```js * feedbackCondition(type, meta, defaultCondition) { * if (type === 'info') { - * return return; + * return true; * } else if (type === 'prefilledOnly') { * return meta.prefilled; * } @@ -775,7 +808,9 @@ export const ValidateMixinImplementation = superclass => ); } - /** @param {import('@lion/core').PropertyValues} changedProperties */ + /** + * @param {import('@lion/core').PropertyValues} changedProperties + */ updated(changedProperties) { super.updated(changedProperties); @@ -783,10 +818,7 @@ export const ValidateMixinImplementation = superclass => changedProperties.has('shouldShowFeedbackFor') || changedProperties.has('hasFeedbackFor') ) { - const ctor = - /** @type {typeof import('../../types/validate/ValidateMixinTypes').ValidateHost} */ ( - this.constructor - ); + const ctor = /** @type {ValidateHostConstructor} */ (this.constructor); // Necessary typecast because types aren't smart enough to understand that we filter out undefined this.showsFeedbackFor = /** @type {string[]} */ ( ctor.validationTypes @@ -822,10 +854,7 @@ export const ValidateMixinImplementation = superclass => * @protected */ _updateShouldShowFeedbackFor() { - const ctor = - /** @type {typeof import('../../types/validate/ValidateMixinTypes').ValidateHost} */ ( - this.constructor - ); + const ctor = /** @type {ValidateHostConstructor} */ (this.constructor); // Necessary typecast because types aren't smart enough to understand that we filter out undefined const newShouldShowFeedbackFor = /** @type {string[]} */ ( @@ -848,18 +877,15 @@ export const ValidateMixinImplementation = superclass => } /** - * Orders all active validators in this.__validationResult. Can - * also filter out occurrences (based on interaction states) + * Orders all active validators in this.__validationResult. + * Can also filter out occurrences (based on interaction states) * @overridable * @param {{ validationResult: Validator[] }} opts * @return {Validator[]} ordered list of Validators with feedback messages visible to the end user * @protected */ _prioritizeAndFilterFeedback({ validationResult }) { - const ctor = - /** @type {typeof import('../../types/validate/ValidateMixinTypes').ValidateHost} */ ( - this.constructor - ); + const ctor = /** @type {ValidateHostConstructor} */ (this.constructor); const types = ctor.validationTypes; // Sort all validators based on the type provided. const res = validationResult diff --git a/packages/form-core/src/validate/Validator.js b/packages/form-core/src/validate/Validator.js index 03a28da3b..f272a3c0e 100644 --- a/packages/form-core/src/validate/Validator.js +++ b/packages/form-core/src/validate/Validator.js @@ -1,44 +1,65 @@ /** - * @typedef {object} MessageData - * @property {*} [MessageData.modelValue] - * @property {string} [MessageData.fieldName] - * @property {HTMLElement} [MessageData.formControl] - * @property {string} [MessageData.type] - * @property {Object.} [MessageData.config] - * @property {string} [MessageData.name] + * @typedef {import('./types').FeedbackMessageData} FeedbackMessageData + * @typedef {import('./types').ValidatorParam} ValidatorParam + * @typedef {import('./types').ValidatorConfig} ValidatorConfig + * @typedef {import('./types').ValidatorOutcome} ValidatorOutcome + * @typedef {import('./types').ValidatorName} ValidatorName + * @typedef {import('./types').ValidationType} ValidationType + * @typedef {import('../FormControlMixin').FormControlHost} FormControlHost */ -export class Validator { +// TODO: support attribute validators like => +// register in a ValidateService that is read by Validator and adds these attrs in properties +// object. +// They would become like configurable +// [global attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes) +// for FormControls. + +export class Validator extends EventTarget { /** - * - * @param {?} [param] - * @param {Object.} [config] + * @param {ValidatorParam} [param] + * @param {ValidatorConfig} [config] */ constructor(param, config) { - this.__fakeExtendsEventTarget(); + super(); - /** @type {?} */ + /** @type {ValidatorParam} */ this.__param = param; - - /** @type {Object.} */ + /** @type {ValidatorConfig} */ this.__config = config || {}; - this.type = (config && config.type) || 'error'; // Default type supported by ValidateMixin - } - - static get validatorName() { - return ''; - } - - static get async() { - return false; + /** @type {ValidationType} */ + this.type = config?.type || 'error'; // Default type supported by ValidateMixin } /** - * @desc The function that returns a Boolean - * @param {?} [modelValue] - * @param {?} [param] - * @param {{}} [config] - * @returns {Boolean|Promise} + * The name under which validation results get registered. For convience and predictability, this + * should always be the same as the constructor name (since it will be obfuscated in js builds, + * we need to provide it separately). + * @type {ValidatorName} + */ + static validatorName = ''; + + /** + * Whether the validator is asynchronous or not. When true., this means execute function returns + * a Promise. This can be handy for: + * - server side calls + * - validations that are dependent on lazy loaded resources (they can be async until the dependency + * is loaded) + * @type {boolean} + */ + static async = false; + + /** + * The function that returns a validity outcome. When we need to shpw feedback, + * it should return true, otherwise false. So when an error\info|warning|success message + * needs to be shown, return true. For async Validators, the function canretun a Promise. + * It's also possible to return an enum. Let's say that a phone number can have multiple + * states: 'invalid-country-code' | 'too-long' | 'too-short' + * Those states can be retrieved in the getMessage + * @param {any} modelValue + * @param {ValidatorParam} [param] + * @param {ValidatorConfig} [config] + * @returns {ValidatorOutcome|Promise} */ // eslint-disable-next-line no-unused-vars, class-methods-use-this execute(modelValue, param, config) { @@ -51,22 +72,55 @@ export class Validator { return true; } + /** + * The first argument of the constructor, for instance 3 in `new MinLength(3)`. Will + * be stored on Validator instance and passed to `execute` function + * @example + * ```js + * // Store reference to Validator instance + * const myValidatorInstance = new MyValidator(1); + * // Use this instance initially on a FormControl (that uses ValidateMixin) + * render(html``, document.body); + * // Based on some event, we need to change the param + * myValidatorInstance.param = 2; + * ``` + * @property {ValidatorParam} + */ set param(p) { this.__param = p; - if (this.dispatchEvent) { - this.dispatchEvent(new Event('param-changed')); - } + /** + * This event is listened for by ValidateMixin. Whenever the validation parameter has + * changed, the FormControl will revalidate itself + */ + this.dispatchEvent(new Event('param-changed')); } get param() { return this.__param; } + /** + * The second argument of the constructor, for instance + * `new MinLength(3, {getFeedMessage: async () => 'too long'})`. + * Will be stored on Validator instance and passed to `execute` function. + * @example + * ```js + * // Store reference to Validator instance + * const myValidatorInstance = new MyValidator(1, {getMessage() => 'x'}); + * // Use this instance initially on a FormControl (that uses ValidateMixin) + * render(html``, document.body); + * // Based on some event, we need to change the param + * myValidatorInstance.config = {getMessage() => 'y'}; + * ``` + * @property {ValidatorConfig} + */ set config(c) { this.__config = c; - if (this.dispatchEvent) { - this.dispatchEvent(new Event('config-changed')); - } + /** + * This event is listened for by ValidateMixin. Whenever the validation config has + * changed, the FormControl will revalidate itself + */ + this.dispatchEvent(new Event('config-changed')); } get config() { @@ -74,9 +128,29 @@ export class Validator { } /** - * @overridable - * @param {MessageData} [data] - * @returns {Promise} + * This is a protected method that usually should not be overridden. It is called by ValidateMixin + * and it gathers data to be passed to getMessage functions found: + * - `this.config.getMessage`, locally provided by consumers of the Validator (overrides global getMessage) + * - `MyValidator.getMessage`, globally provided by creators or consumers of the Validator + * + * Confusion can arise because of similarities with former mentioned methods. In that regard, a + * better name for this function would have been _pepareDataAndCallHighestPrioGetMessage. + * @example + * ```js + * class MyValidator extends Validator { + * // ... + * // 1. globally defined + * static async getMessage() { + * return 'lowest prio, defined globally by Validator author' + * } + * } + * // 2. globally overridden + * MyValidator.getMessage = async() => 'overrides already configured message'; + * // 3. locally overridden + * new MyValidator(myParam, { getMessage: async() => 'locally defined, always wins' }); + * ``` + * @param {Partial} [data] + * @returns {Promise} * @protected */ async _getMessage(data) { @@ -101,9 +175,20 @@ export class Validator { } /** + * Called inside Validator.prototype._getMessage (see explanation). + * @example + * ```js + * class MyValidator extends Validator { + * static async getMessage() { + * return 'lowest prio, defined globally by Validator author' + * } + * } + * // globally overridden + * MyValidator.getMessage = async() => 'overrides already configured message'; + * ``` * @overridable - * @param {MessageData} [data] - * @returns {Promise} + * @param {Partial} [data] + * @returns {Promise} */ // eslint-disable-next-line no-unused-vars static async getMessage(data) { @@ -111,12 +196,38 @@ export class Validator { } /** - * @param {HTMLElement} formControl + * Validators are allowed to have knowledge about FormControls. + * In some cases (in case of the Required Validator) we wanted to enhance accessibility by + * adding [aria-required]. Also, it would be possible to write an advanced MinLength + * Validator that adds a .preprocessor that restricts from typing too many characters + * (like the native [minlength] validator). + * Will be called when Validator is added to FormControl.validators. + * @example + * ```js + * onFormControlConnect(formControl) { + * if(formControl.inputNode) { + * inputNode.setAttribute('aria-required', 'true'); + * } + * } + * + * ``` + * @configurable + * @param {FormControlHost} formControl */ onFormControlConnect(formControl) {} // eslint-disable-line /** - * @param {HTMLElement} formControl + * Also see `onFormControlConnect`. + * Will be called when Validator is removed from FormControl.validators. + * @example + * ```js + * onFormControlDisconnect(formControl) { + * if(formControl.inputNode) { + * inputNode.removeAttribute('aria-required'); + * } + * } + * @configurable + * @param {FormControlHost} formControl */ onFormControlDisconnect(formControl) {} // eslint-disable-line @@ -130,41 +241,6 @@ export class Validator { * - Or, when a webworker was started, its process could be aborted and then restarted. */ abortExecution() {} // eslint-disable-line - - /** - * @private - */ - __fakeExtendsEventTarget() { - const delegate = document.createDocumentFragment(); - - /** - * - * @param {string} type - * @param {EventListener} listener - * @param {Object} [opts] - */ - const delegatedAddEventListener = (type, listener, opts) => - delegate.addEventListener(type, listener, opts); - - /** - * @param {string} type - * @param {EventListener} listener - * @param {Object} [opts] - */ - const delegatedRemoveEventListener = (type, listener, opts) => - delegate.removeEventListener(type, listener, opts); - - /** - * @param {Event|CustomEvent} event - */ - const delegatedDispatchEvent = event => delegate.dispatchEvent(event); - - this.addEventListener = delegatedAddEventListener; - - this.removeEventListener = delegatedRemoveEventListener; - - this.dispatchEvent = delegatedDispatchEvent; - } } // For simplicity, a default validator only handles one state: diff --git a/packages/form-core/test-suites/ValidateMixin.suite.js b/packages/form-core/test-suites/ValidateMixin.suite.js index 8dc835d2e..8ab767288 100644 --- a/packages/form-core/test-suites/ValidateMixin.suite.js +++ b/packages/form-core/test-suites/ValidateMixin.suite.js @@ -70,7 +70,7 @@ export function runValidateMixinSuite(customConfig) { */ describe('Validation initiation', () => { - it('throws and console.errors if adding not Validator instances to the validators array', async () => { + it('throws and console.errors if adding non Validator instances to the validators array', async () => { // we throw and console error as constructor throw are not visible to the end user const stub = sinon.stub(console, 'error'); const el = /** @type {ValidateElement} */ (await fixture(html`<${tag}>`)); @@ -93,7 +93,7 @@ export function runValidateMixinSuite(customConfig) { stub.restore(); }); - it('throws and console error if adding a not supported Validator type', async () => { + it('throws a console error if adding a non supported Validator type', async () => { // we throw and console error to improve DX const stub = sinon.stub(console, 'error'); const errorMessage = `This component does not support the validator type "major error" used in "MajorValidator". You may change your validators type or add it to the components "static get validationTypes() {}".`; @@ -720,7 +720,10 @@ export function runValidateMixinSuite(customConfig) { // @ts-ignore [allow-private] in test const totalValidationResult = el.__validationResult; - expect(totalValidationResult).to.eql([resultV, validator]); + expect(totalValidationResult).to.eql([ + { validator: resultV, outcome: true }, + { validator, outcome: true }, + ]); }); }); @@ -1049,7 +1052,7 @@ export function runValidateMixinSuite(customConfig) { await fixture(html` <${tag} .modelValue=${'123'} - .validators=${[new MinLength(3, { message: 'foo' })]}> + .validators=${[new MinLength(3, { getMessage: async () => 'foo' })]}> `) ); @@ -1352,14 +1355,14 @@ export function runValidateMixinSuite(customConfig) { }; } - // @ts-ignore + /** + * @param {string} type + */ _showFeedbackConditionFor(type) { switch (type) { case 'error': - // @ts-ignore return ['A', 'B'].includes(this.modelValue); default: - // @ts-ignore return ['B', 'C'].includes(this.modelValue); } } @@ -1384,12 +1387,10 @@ export function runValidateMixinSuite(customConfig) { ['D', []], ]) { el.modelValue = modelValue; - // eslint-disable-next-line no-await-in-loop await el.updateComplete; - // eslint-disable-next-line no-await-in-loop await el.feedbackComplete; - // @ts-ignore + // @ts-expect-error [allow-protected] const resultOrder = el._feedbackNode.feedbackData.map(v => v.type); expect(resultOrder).to.deep.equal(expected); } diff --git a/packages/form-core/test-suites/ValidateMixinFeedbackPart.suite.js b/packages/form-core/test-suites/ValidateMixinFeedbackPart.suite.js index 4108a99e2..bd92897be 100644 --- a/packages/form-core/test-suites/ValidateMixinFeedbackPart.suite.js +++ b/packages/form-core/test-suites/ValidateMixinFeedbackPart.suite.js @@ -7,6 +7,10 @@ import sinon from 'sinon'; import { DefaultSuccess, MinLength, Required, ValidateMixin, Validator } from '../index.js'; import { AlwaysInvalid } from '../test-helpers/index.js'; +/** + * @typedef {import('../src/validate/types').FeedbackMessageData} FeedbackMessageData + */ + export function runValidateMixinFeedbackPart() { describe('Validity Feedback', () => { beforeEach(() => { @@ -303,7 +307,7 @@ export function runValidateMixinFeedbackPart() { await fixture(html` <${tag} .submitted=${true} - .validators=${[new MinLength(3, { getMessage: () => 'custom via config' })]} + .validators=${[new MinLength(3, { getMessage: async () => 'custom via config' })]} >${lightDom} `) ); @@ -397,7 +401,7 @@ export function runValidateMixinFeedbackPart() { }); }); - describe('Meta data', () => { + describe('FeedbackMessageData', () => { it('".getMessage()" gets a reference to formControl, params, modelValue and type', async () => { class ValidateElementCustomTypes extends ValidateMixin(LitElement) { static get validationTypes() { @@ -431,6 +435,7 @@ export function runValidateMixinFeedbackPart() { fieldName: '', type: 'x', name: 'MinLength', + outcome: true, }); const instanceMessageSpy = sinon.spy(); @@ -457,6 +462,7 @@ export function runValidateMixinFeedbackPart() { fieldName: '', type: 'error', name: 'MinLength', + outcome: true, }); }); @@ -485,41 +491,85 @@ export function runValidateMixinFeedbackPart() { fieldName: 'myField', type: 'error', name: 'MinLength', + outcome: true, }); }); - }); - it('".getMessage()" gets .fieldName defined on Validator config', async () => { - const constructorValidator = new MinLength(4, { - fieldName: new Promise(resolve => resolve('myFieldViaCfg')), + it('".getMessage()" gets .fieldName defined on Validator config', async () => { + const constructorValidator = new MinLength(4, { + fieldName: new Promise(resolve => resolve('myFieldViaCfg')), + }); + const ctorValidator = /** @type {typeof MinLength} */ (constructorValidator.constructor); + const spy = sinon.spy(ctorValidator, 'getMessage'); + + const el = /** @type {ValidateElement} */ ( + await fixture(html` + <${tag} + .submitted=${true} + .validators=${[constructorValidator]} + .modelValue=${'cat'} + .fieldName=${new Promise(resolve => resolve('myField'))} + >${lightDom} + `) + ); + await el.updateComplete; + await el.feedbackComplete; + + // ignore fieldName Promise as it will always be unique + const compare = spy.args[0][0]; + delete compare?.config?.fieldName; + expect(compare).to.eql({ + config: {}, + params: 4, + modelValue: 'cat', + formControl: el, + fieldName: 'myFieldViaCfg', + type: 'error', + name: 'MinLength', + outcome: true, + }); }); - const ctorValidator = /** @type {typeof MinLength} */ (constructorValidator.constructor); - const spy = sinon.spy(ctorValidator, 'getMessage'); - const el = /** @type {ValidateElement} */ ( - await fixture(html` - <${tag} - .submitted=${true} - .validators=${[constructorValidator]} - .modelValue=${'cat'} - .fieldName=${new Promise(resolve => resolve('myField'))} - >${lightDom} - `) - ); - await el.updateComplete; - await el.feedbackComplete; + it('".getMessage()" gets .outcome, which can be "true" or an enum', async () => { + class EnumOutComeValidator extends Validator { + static validatorName = 'EnumOutCome'; - // ignore fieldName Promise as it will always be unique - const compare = spy.args[0][0]; - delete compare?.config?.fieldName; - expect(compare).to.eql({ - config: {}, - params: 4, - modelValue: 'cat', - formControl: el, - fieldName: 'myFieldViaCfg', - type: 'error', - name: 'MinLength', + execute() { + return 'a-string-instead-of-bool'; + } + + /** + * @param {FeedbackMessageData} meta + * @returns + */ + static async getMessage({ outcome }) { + const results = { + 'a-string-instead-of-bool': 'Msg based on enum output', + }; + return results[/** @type {string} */ (outcome)]; + } + } + + const enumOutComeValidator = new EnumOutComeValidator(); + const spy = sinon.spy( + /** @type {typeof EnumOutComeValidator} */ (enumOutComeValidator.constructor), + 'getMessage', + ); + + const el = /** @type {ValidateElement} */ ( + await fixture(html` + <${tag} + .submitted=${true} + .validators=${[enumOutComeValidator]} + .modelValue=${'cat'} + >${lightDom} + `) + ); + await el.updateComplete; + await el.feedbackComplete; + + const getMessageArs = spy.args[0][0]; + expect(getMessageArs.outcome).to.equal('a-string-instead-of-bool'); }); }); From 876cf07fdbe727bebb47c3b6d2e2e27a420d9734 Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Tue, 15 Mar 2022 19:05:03 +0100 Subject: [PATCH 05/19] chore(form-core): fix types --- .../types/FormControlMixinTypes.d.ts | 2 ++ .../form-core/types/FormatMixinTypes.d.ts | 25 +++++++++++++------ .../types/validate/ValidateMixinTypes.d.ts | 2 +- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/packages/form-core/types/FormControlMixinTypes.d.ts b/packages/form-core/types/FormControlMixinTypes.d.ts index 156bb9f1a..3249c3930 100644 --- a/packages/form-core/types/FormControlMixinTypes.d.ts +++ b/packages/form-core/types/FormControlMixinTypes.d.ts @@ -36,6 +36,8 @@ export type ModelValueEventDetails = { declare interface HTMLElementWithValue extends HTMLElement { value: string; + selectionStart?: number; + selectionEnd?: number; } export declare class FormControlHost { diff --git a/packages/form-core/types/FormatMixinTypes.d.ts b/packages/form-core/types/FormatMixinTypes.d.ts index 1e0c668bf..f678648f7 100644 --- a/packages/form-core/types/FormatMixinTypes.d.ts +++ b/packages/form-core/types/FormatMixinTypes.d.ts @@ -4,6 +4,7 @@ import { FormatNumberOptions } from '@lion/localize/types/LocalizeMixinTypes'; import { ValidateHost } from './validate/ValidateMixinTypes'; import { FormControlHost } from './FormControlMixinTypes'; +export type FormatOptions = { mode: 'pasted' | 'auto' } & object; export declare class FormatHost { /** * Converts viewValue to modelValue @@ -12,7 +13,7 @@ export declare class FormatHost { * @param {FormatOptions} opts * @returns {*} modelValue */ - parser(v: string, opts: FormatNumberOptions): unknown; + parser(v: string, opts: FormatOptions): unknown; /** * Converts modelValue to formattedValue (formattedValue will be synced with @@ -23,7 +24,7 @@ export declare class FormatHost { * @param {FormatOptions} opts * @returns {string} formattedValue */ - formatter(v: unknown, opts?: FormatNumberOptions): string; + formatter(v: unknown, opts?: FormatOptions): string; /** * Converts `.modelValue` to `.serializedValue` @@ -44,19 +45,27 @@ export declare class FormatHost { deserializer(v: string): unknown; /** - * Preprocesses the viewValue before it's parsed to a modelValue. Can be used to filter - * invalid input amongst others. + * Preprocessors could be considered 'live formatters'. Their result is shown to the user + * on keyup instead of after blurring the field. The biggest difference between preprocessors + * and formatters is their moment of execution: preprocessors are run before modelValue is + * computed (and work based on view value), whereas formatters are run after the parser (and + * are based on modelValue) + * Automatically formats code while typing. It depends on a preprocessro that smartly + * updates the viewValue and caret position for best UX. * @example * ```js * preprocessor(viewValue) { * // only use digits * return viewValue.replace(/\D/g, ''); * } - * ``` * @param {string} v - the raw value from the after keyUp/Down event - * @returns {string} preprocessedValue: the result of preprocessing for invalid input + * @param {FormatOptions & { prevViewValue: string; currentCaretIndex: number }} opts - the raw value from the after keyUp/Down event + * @returns {{ viewValue:string; caretIndex:number; }|string|undefined} preprocessedValue: the result of preprocessing for invalid input */ - preprocessor(v: string): string; + preprocessor( + v: string, + options: FormatOptions & { prevViewValue: string; currentCaretIndex: number }, + ): { viewValue: string; caretIndex: number } | string | undefined; /** * The view value is the result of the formatter function (when available). @@ -99,7 +108,7 @@ export declare class FormatHost { /** * Configuration object that will be available inside the formatter function */ - formatOptions: FormatNumberOptions; + formatOptions: FormatOptions; /** * The view value. Will be delegated to `._inputNode.value` diff --git a/packages/form-core/types/validate/ValidateMixinTypes.d.ts b/packages/form-core/types/validate/ValidateMixinTypes.d.ts index 26737c9cb..667855124 100644 --- a/packages/form-core/types/validate/ValidateMixinTypes.d.ts +++ b/packages/form-core/types/validate/ValidateMixinTypes.d.ts @@ -104,7 +104,7 @@ export declare class ValidateHost { * Triggered by: * - modelValue change * - change in the 'validators' array - * - change in the config of an individual Validator + * - change in the config of an individual Validator * * Three situations are handled: * - a1) the FormControl is empty: further execution is halted. When the Required Validator From 3772c943011e976d9e134ab50dec86239093c1cb Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Tue, 15 Mar 2022 19:06:13 +0100 Subject: [PATCH 06/19] patch(form-core): expose mimicUserInput test-helper --- .changeset/green-ads-fold.md | 5 +++++ packages/form-core/test-helpers/index.js | 1 + .../form-core/test-helpers/mimicUserInput.js | 16 ++++++++++++++++ 3 files changed, 22 insertions(+) create mode 100644 .changeset/green-ads-fold.md create mode 100644 packages/form-core/test-helpers/mimicUserInput.js diff --git a/.changeset/green-ads-fold.md b/.changeset/green-ads-fold.md new file mode 100644 index 000000000..5437bd4c2 --- /dev/null +++ b/.changeset/green-ads-fold.md @@ -0,0 +1,5 @@ +--- +'@lion/form-core': patch +--- + +form-core: expose 'mimicUserInput' test-helper diff --git a/packages/form-core/test-helpers/index.js b/packages/form-core/test-helpers/index.js index fcc2d3d72..3b21d5670 100644 --- a/packages/form-core/test-helpers/index.js +++ b/packages/form-core/test-helpers/index.js @@ -1,2 +1,3 @@ export * from './ExampleValidators.js'; export * from './getFormControlMembers.js'; +export * from './mimicUserInput.js'; diff --git a/packages/form-core/test-helpers/mimicUserInput.js b/packages/form-core/test-helpers/mimicUserInput.js new file mode 100644 index 000000000..b11e532e3 --- /dev/null +++ b/packages/form-core/test-helpers/mimicUserInput.js @@ -0,0 +1,16 @@ +// @ts-nocheck +/** + * @param {HTMLElement} formControl + * @param {?} newViewValue + * @param {{caretIndex?:number}} config + */ +export function mimicUserInput(formControl, newViewValue, { caretIndex } = {}) { + formControl.value = newViewValue; // eslint-disable-line no-param-reassign + if (caretIndex) { + // eslint-disable-next-line no-param-reassign + formControl._inputNode.selectionStart = caretIndex; + // eslint-disable-next-line no-param-reassign + formControl._inputNode.selectionEnd = caretIndex; + } + formControl._inputNode.dispatchEvent(new Event('input', { bubbles: true })); +} From a64c552b61a78f4501bcf3668aa3b26dddbd1628 Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Tue, 15 Mar 2022 19:08:44 +0100 Subject: [PATCH 07/19] fix(validate-messages): typo IsData message --- .changeset/fifty-comics-attend.md | 5 +++++ packages/validate-messages/translations/en.js | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/fifty-comics-attend.md diff --git a/.changeset/fifty-comics-attend.md b/.changeset/fifty-comics-attend.md new file mode 100644 index 000000000..628df1f0a --- /dev/null +++ b/.changeset/fifty-comics-attend.md @@ -0,0 +1,5 @@ +--- +'@lion/validate-messages': patch +--- + +fix(validate-messages): typo IsData message diff --git a/packages/validate-messages/translations/en.js b/packages/validate-messages/translations/en.js index 192700628..4acce51c8 100644 --- a/packages/validate-messages/translations/en.js +++ b/packages/validate-messages/translations/en.js @@ -30,7 +30,7 @@ export default { MinNumber: 'Please enter a(n) {fieldName} higher than or equal to {params}.', MaxNumber: 'Please enter a(n) {fieldName} lower than or equal to {params}.', MinMaxNumber: 'Please enter a(n) {fieldName} between {params.min} and {params.max}.', - IsDate: 'lease enter a valid date (DD/MM/YYYY).', + IsDate: 'Please enter a valid date (DD/MM/YYYY).', MinDate: 'Please enter a(n) {fieldName} after or equal to {params, date, YYYYMMDD}.', MaxDate: 'Please enter a(n) {fieldName} before or equal to {params, date, YYYYMMDD}.', MinMaxDate: From 5fc39bed09673bd37dc9cd264effd21be8c76545 Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Tue, 15 Mar 2022 19:13:01 +0100 Subject: [PATCH 08/19] feat(select-rich): give invoker access .to hostElement --- packages/select-rich/src/LionSelectInvoker.js | 28 ++++++++++--------- packages/select-rich/src/LionSelectRich.js | 3 ++ 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/packages/select-rich/src/LionSelectInvoker.js b/packages/select-rich/src/LionSelectInvoker.js index 2b1ed0727..21fcfeeaa 100644 --- a/packages/select-rich/src/LionSelectInvoker.js +++ b/packages/select-rich/src/LionSelectInvoker.js @@ -5,6 +5,7 @@ import { css, html, SlotMixin } from '@lion/core'; * @typedef {import('@lion/core').CSSResult} CSSResult * @typedef {import('@lion/core').TemplateResult} TemplateResult * @typedef {import('@lion/listbox').LionOption} LionOption + * @typedef {import('@lion/select-rich').LionSelectRich} LionSelectRich */ /** @@ -32,19 +33,10 @@ export class LionSelectInvoker extends SlotMixin(LionButton) { static get properties() { return { ...super.properties, - selectedElement: { - type: Object, - }, - readOnly: { - type: Boolean, - reflect: true, - attribute: 'readonly', - }, - singleOption: { - type: Boolean, - reflect: true, - attribute: 'single-option', - }, + selectedElement: { type: Object }, + hostElement: { type: Object }, + readOnly: { type: Boolean, reflect: true, attribute: 'readonly' }, + singleOption: { type: Boolean, reflect: true, attribute: 'single-option' }, }; } @@ -61,6 +53,9 @@ export class LionSelectInvoker extends SlotMixin(LionButton) { }; } + /** + * @configure OverlayMixin + */ get _contentWrapperNode() { return /** @type {ShadowRoot} */ (this.shadowRoot).getElementById('content-wrapper'); } @@ -78,6 +73,13 @@ export class LionSelectInvoker extends SlotMixin(LionButton) { * @type {LionOption | null} */ this.selectedElement = null; + + /** + * The LionSelectRich element this invoker is part of. Will be set on connectedCallback of + * LionSelectRich + * @type {LionSelectRich | null} + */ + this.hostElement = null; /** * When the connected LionSelectRich instance has only one option, * this should be reflected in the invoker as well diff --git a/packages/select-rich/src/LionSelectRich.js b/packages/select-rich/src/LionSelectRich.js index 9223f865a..3d70117b5 100644 --- a/packages/select-rich/src/LionSelectRich.js +++ b/packages/select-rich/src/LionSelectRich.js @@ -140,6 +140,9 @@ export class LionSelectRich extends SlotMixin(ScopedElementsMixin(OverlayMixin(L super.connectedCallback(); this._invokerNode.selectedElement = this.formElements[/** @type {number} */ (this.checkedIndex)]; + + this._invokerNode.hostElement = this; + this.__setupInvokerNode(); this.__toggleInvokerDisabled(); this.addEventListener('keyup', this.__onKeyUp); From e3e761afb478668e8e76309c6e90bf3e628489ea Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Tue, 15 Mar 2022 19:19:08 +0100 Subject: [PATCH 09/19] chore: select-rich doc corrections --- .../components/inputs/select-rich/features.md | 96 +++++++++++-------- 1 file changed, 55 insertions(+), 41 deletions(-) diff --git a/docs/components/inputs/select-rich/features.md b/docs/components/inputs/select-rich/features.md index 58e384e6f..e1d5412cf 100644 --- a/docs/components/inputs/select-rich/features.md +++ b/docs/components/inputs/select-rich/features.md @@ -11,7 +11,7 @@ import '@lion/select-rich/define'; You can set the full `modelValue` for each option, which includes the checked property for whether it is checked or not. ```html -Red +Red ``` ## Options with HTML @@ -21,15 +21,15 @@ The main feature of this rich select that makes it rich, is that your options ca ```js preview-story export const optionsWithHTML = () => html` - +

I am red

and multi Line

- +

I am hotpink

and multi Line

- +

I am teal

and multi Line

@@ -49,19 +49,19 @@ export const manyOptionsWithScrolling = () => html` } - +

I am red

- +

I am hotpink

- +

I am teal

- +

I am green

- +

I am blue

@@ -126,7 +126,7 @@ export const renderOptions = ({ shadowRoot }) => { { type: 'visacard', label: 'Visa Card', amount: 0, active: false }, ]; function showOutput(ev) { - shadowRoot.getElementById('demoRenderOutput').innerHTML = JSON.stringify( + shadowRoot.querySelector('#demoRenderOutput').innerHTML = JSON.stringify( ev.target.modelValue, null, 2, @@ -305,49 +305,63 @@ export const singleOptionRemoveAdd = () => { ## Custom Invoker You can provide a custom invoker using the invoker slot. -This means it will get the selected value(s) as an input property `.selectedElement`. +LionSelectRich will give it acces to: -You can use this `selectedElement` to then render the content to your own invoker. +- the currently selected option via `.selectedElement` +- LionSelectRich itself, via `.hostElement` + +Code of an advanced custom invoker is shown below (this is the code for the +invoker used in [IntlSelectRich](./examples.md)). +The invoker is usually added in the invoker slot of the LionSelectRich subclass. +However, it would also be possible for an application developer to provide the invoker +by putting it in light dom: ```html - + ... ``` -An example of how such a custom invoker class could look like: - ```js -class MyInvokerButton extends LitElement() { - static get properties() { - return { - selectedElement: { - type: Object, - }; - } - } - - _contentTemplate() { - if (this.selectedElement) { - const labelNodes = Array.from(this.selectedElement.childNodes); - // Nested html in the selected option - if (labelNodes.length > 0) { - // Cloning is important if you plan on passing nodes straight to a lit template - return labelNodes.map(node => node.cloneNode(true)); - } - // Or if it is just text inside the selected option, no html - return this.selectedElement.textContent; - } - return ``; +import { LionSelectInvoker } from '@lion/select-rich'; + +class IntlSelectInvoker extends LionSelectInvoker { + /** + * 1. Add your own styles + * @configure LitElement + * @enhance LionSelectInvoker + */ + static styles = [ + /** see IntlSelectRich listed above */ + ]; + + /** + * 2. Take back control of slots (LionSelectInvoker adds slots you most likely don't want) + * @configure SlotMixin + * @override LionSelectInvoker + */ + get slots() { + return {}; } + /** + * 3. Add you custom render function + * @override LionSelectInvoker + */ render() { - return html` -
- ${this._contentTemplate()} -
- `; + const ctor = /** @type {typeof LionSelectInvoker} */ (this.constructor); + return ctor._mainTemplate(this._templateData); + } + + get _templateData() { + return { + data: { selectedElement: this.selectedElement, hostElement: this.hostElement }, + }; + } + + static _mainTemplate(templateData) { + /** see IntlSelectRich listed above */ } } ``` From 8d44b1d531473e9a30fb1e6282cfc62feaf69186 Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Tue, 15 Mar 2022 19:20:58 +0100 Subject: [PATCH 10/19] chore: select-rich Subclasser examples --- .../components/inputs/select-rich/examples.md | 31 + .../inputs/select-rich/src/flagStyles.js | 1250 ++++++++++++ .../inputs/select-rich/src/flags.png | Bin 0 -> 70857 bytes .../inputs/select-rich/src/flags@2x.png | Bin 0 -> 174369 bytes .../select-rich/src/intl-select-rich.js | 193 ++ .../inputs/select-rich/src/regionMetaList.js | 1717 +++++++++++++++++ 6 files changed, 3191 insertions(+) create mode 100644 docs/components/inputs/select-rich/examples.md create mode 100644 docs/components/inputs/select-rich/src/flagStyles.js create mode 100644 docs/components/inputs/select-rich/src/flags.png create mode 100644 docs/components/inputs/select-rich/src/flags@2x.png create mode 100644 docs/components/inputs/select-rich/src/intl-select-rich.js create mode 100644 docs/components/inputs/select-rich/src/regionMetaList.js diff --git a/docs/components/inputs/select-rich/examples.md b/docs/components/inputs/select-rich/examples.md new file mode 100644 index 000000000..32a23a961 --- /dev/null +++ b/docs/components/inputs/select-rich/examples.md @@ -0,0 +1,31 @@ +# Inputs >> Select Rich >> Examples ||30 + +```js script +import { html } from '@mdjs/mdjs-preview'; +import { repeat } from '@lion/core'; +import '@lion/select-rich/define'; +import './src/intl-select-rich.js'; +import { regionMetaList } from './src/regionMetaList.js'; +``` + +## Select Rich International + +A visually advanced Subclasser implementation of `LionSelectRich`. + +Inspired by: + +- [intl-tel-input](https://intl-tel-input.com/) + +```js story +export const IntlSelectRich = () => html` + + ${repeat( + regionMetaList, + regionMeta => regionMeta.regionCode, + regionMeta => + html` + `, + )} + +`; +``` diff --git a/docs/components/inputs/select-rich/src/flagStyles.js b/docs/components/inputs/select-rich/src/flagStyles.js new file mode 100644 index 000000000..03632c6fb --- /dev/null +++ b/docs/components/inputs/select-rich/src/flagStyles.js @@ -0,0 +1,1250 @@ +import { css, unsafeCSS } from '@lion/core'; + +const flagsImgUrl = unsafeCSS(new URL('./flags.png', import.meta.url).href); +const flagsImg2xUrl = unsafeCSS(new URL('./flags@2x.png', import.meta.url).href); + +export const flagStyles = css` + .iti { + position: relative; + display: inline-block; + } + .iti * { + box-sizing: border-box; + -moz-box-sizing: border-box; + } + .iti__hide { + display: none; + } + .iti__v-hide { + visibility: hidden; + } + .iti input, + .iti input[type='text'], + .iti input[type='tel'] { + position: relative; + z-index: 0; + margin-top: 0 !important; + margin-bottom: 0 !important; + padding-right: 36px; + margin-right: 0; + } + .iti__flag-container { + position: absolute; + top: 0; + bottom: 0; + right: 0; + padding: 1px; + } + .iti__selected-flag { + z-index: 1; + position: relative; + display: flex; + align-items: center; + height: 100%; + padding: 0 6px 0 8px; + } + .iti__arrow { + margin-left: 6px; + width: 0; + height: 0; + border-left: 3px solid transparent; + border-right: 3px solid transparent; + border-top: 4px solid #555; + } + .iti__arrow--up { + border-top: none; + border-bottom: 4px solid #555; + } + .iti__country-list { + position: absolute; + z-index: 2; + list-style: none; + text-align: left; + padding: 0; + margin: 0 0 0 -1px; + box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.2); + background-color: white; + border: 1px solid #ccc; + white-space: nowrap; + max-height: 200px; + overflow-y: scroll; + -webkit-overflow-scrolling: touch; + } + .iti__country-list--dropup { + bottom: 100%; + margin-bottom: -1px; + } + @media (max-width: 500px) { + .iti__country-list { + white-space: normal; + } + } + .iti__flag-box { + display: inline-block; + width: 20px; + } + .iti__divider { + padding-bottom: 5px; + margin-bottom: 5px; + border-bottom: 1px solid #ccc; + } + .iti__country { + padding: 5px 10px; + outline: none; + } + .iti__dial-code { + color: #999; + } + .iti__country.iti__highlight { + background-color: rgba(0, 0, 0, 0.05); + } + .iti__flag-box, + .iti__country-name, + .iti__dial-code { + vertical-align: middle; + } + .iti__flag-box, + .iti__country-name { + margin-right: 6px; + } + .iti--allow-dropdown input, + .iti--allow-dropdown input[type='text'], + .iti--allow-dropdown input[type='tel'], + .iti--separate-dial-code input, + .iti--separate-dial-code input[type='text'], + .iti--separate-dial-code input[type='tel'] { + padding-right: 6px; + padding-left: 52px; + margin-left: 0; + } + .iti--allow-dropdown .iti__flag-container, + .iti--separate-dial-code .iti__flag-container { + right: auto; + left: 0; + } + .iti--allow-dropdown .iti__flag-container:hover { + cursor: pointer; + } + .iti--allow-dropdown .iti__flag-container:hover .iti__selected-flag { + background-color: rgba(0, 0, 0, 0.05); + } + .iti--allow-dropdown input[disabled] + .iti__flag-container:hover, + .iti--allow-dropdown input[readonly] + .iti__flag-container:hover { + cursor: default; + } + .iti--allow-dropdown input[disabled] + .iti__flag-container:hover .iti__selected-flag, + .iti--allow-dropdown input[readonly] + .iti__flag-container:hover .iti__selected-flag { + background-color: transparent; + } + .iti--separate-dial-code .iti__selected-flag { + background-color: rgba(0, 0, 0, 0.05); + } + .iti--separate-dial-code .iti__selected-dial-code { + margin-left: 6px; + } + .iti--container { + position: absolute; + top: -1000px; + left: -1000px; + z-index: 1060; + padding: 1px; + } + .iti--container:hover { + cursor: pointer; + } + + .iti-mobile .iti--container { + top: 30px; + bottom: 30px; + left: 30px; + right: 30px; + position: fixed; + } + + .iti-mobile .iti__country-list { + max-height: 100%; + width: 100%; + } + + .iti-mobile .iti__country { + padding: 10px 10px; + line-height: 1.5em; + } + + .iti__flag { + width: 20px; + } + .iti__flag.iti__be { + width: 18px; + } + .iti__flag.iti__ch { + width: 15px; + } + .iti__flag.iti__mc { + width: 19px; + } + .iti__flag.iti__ne { + width: 18px; + } + .iti__flag.iti__np { + width: 13px; + } + .iti__flag.iti__va { + width: 15px; + } + @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) { + .iti__flag { + background-size: 5652px 15px; + } + } + .iti__flag.iti__ac { + height: 10px; + background-position: 0px 0px; + } + .iti__flag.iti__ad { + height: 14px; + background-position: -22px 0px; + } + .iti__flag.iti__ae { + height: 10px; + background-position: -44px 0px; + } + .iti__flag.iti__af { + height: 14px; + background-position: -66px 0px; + } + .iti__flag.iti__ag { + height: 14px; + background-position: -88px 0px; + } + .iti__flag.iti__ai { + height: 10px; + background-position: -110px 0px; + } + .iti__flag.iti__al { + height: 15px; + background-position: -132px 0px; + } + .iti__flag.iti__am { + height: 10px; + background-position: -154px 0px; + } + .iti__flag.iti__ao { + height: 14px; + background-position: -176px 0px; + } + .iti__flag.iti__aq { + height: 14px; + background-position: -198px 0px; + } + .iti__flag.iti__ar { + height: 13px; + background-position: -220px 0px; + } + .iti__flag.iti__as { + height: 10px; + background-position: -242px 0px; + } + .iti__flag.iti__at { + height: 14px; + background-position: -264px 0px; + } + .iti__flag.iti__au { + height: 10px; + background-position: -286px 0px; + } + .iti__flag.iti__aw { + height: 14px; + background-position: -308px 0px; + } + .iti__flag.iti__ax { + height: 13px; + background-position: -330px 0px; + } + .iti__flag.iti__az { + height: 10px; + background-position: -352px 0px; + } + .iti__flag.iti__ba { + height: 10px; + background-position: -374px 0px; + } + .iti__flag.iti__bb { + height: 14px; + background-position: -396px 0px; + } + .iti__flag.iti__bd { + height: 12px; + background-position: -418px 0px; + } + .iti__flag.iti__be { + height: 15px; + background-position: -440px 0px; + } + .iti__flag.iti__bf { + height: 14px; + background-position: -460px 0px; + } + .iti__flag.iti__bg { + height: 12px; + background-position: -482px 0px; + } + .iti__flag.iti__bh { + height: 12px; + background-position: -504px 0px; + } + .iti__flag.iti__bi { + height: 12px; + background-position: -526px 0px; + } + .iti__flag.iti__bj { + height: 14px; + background-position: -548px 0px; + } + .iti__flag.iti__bl { + height: 14px; + background-position: -570px 0px; + } + .iti__flag.iti__bm { + height: 10px; + background-position: -592px 0px; + } + .iti__flag.iti__bn { + height: 10px; + background-position: -614px 0px; + } + .iti__flag.iti__bo { + height: 14px; + background-position: -636px 0px; + } + .iti__flag.iti__bq { + height: 14px; + background-position: -658px 0px; + } + .iti__flag.iti__br { + height: 14px; + background-position: -680px 0px; + } + .iti__flag.iti__bs { + height: 10px; + background-position: -702px 0px; + } + .iti__flag.iti__bt { + height: 14px; + background-position: -724px 0px; + } + .iti__flag.iti__bv { + height: 15px; + background-position: -746px 0px; + } + .iti__flag.iti__bw { + height: 14px; + background-position: -768px 0px; + } + .iti__flag.iti__by { + height: 10px; + background-position: -790px 0px; + } + .iti__flag.iti__bz { + height: 14px; + background-position: -812px 0px; + } + .iti__flag.iti__ca { + height: 10px; + background-position: -834px 0px; + } + .iti__flag.iti__cc { + height: 10px; + background-position: -856px 0px; + } + .iti__flag.iti__cd { + height: 15px; + background-position: -878px 0px; + } + .iti__flag.iti__cf { + height: 14px; + background-position: -900px 0px; + } + .iti__flag.iti__cg { + height: 14px; + background-position: -922px 0px; + } + .iti__flag.iti__ch { + height: 15px; + background-position: -944px 0px; + } + .iti__flag.iti__ci { + height: 14px; + background-position: -961px 0px; + } + .iti__flag.iti__ck { + height: 10px; + background-position: -983px 0px; + } + .iti__flag.iti__cl { + height: 14px; + background-position: -1005px 0px; + } + .iti__flag.iti__cm { + height: 14px; + background-position: -1027px 0px; + } + .iti__flag.iti__cn { + height: 14px; + background-position: -1049px 0px; + } + .iti__flag.iti__co { + height: 14px; + background-position: -1071px 0px; + } + .iti__flag.iti__cp { + height: 14px; + background-position: -1093px 0px; + } + .iti__flag.iti__cr { + height: 12px; + background-position: -1115px 0px; + } + .iti__flag.iti__cu { + height: 10px; + background-position: -1137px 0px; + } + .iti__flag.iti__cv { + height: 12px; + background-position: -1159px 0px; + } + .iti__flag.iti__cw { + height: 14px; + background-position: -1181px 0px; + } + .iti__flag.iti__cx { + height: 10px; + background-position: -1203px 0px; + } + .iti__flag.iti__cy { + height: 14px; + background-position: -1225px 0px; + } + .iti__flag.iti__cz { + height: 14px; + background-position: -1247px 0px; + } + .iti__flag.iti__de { + height: 12px; + background-position: -1269px 0px; + } + .iti__flag.iti__dg { + height: 10px; + background-position: -1291px 0px; + } + .iti__flag.iti__dj { + height: 14px; + background-position: -1313px 0px; + } + .iti__flag.iti__dk { + height: 15px; + background-position: -1335px 0px; + } + .iti__flag.iti__dm { + height: 10px; + background-position: -1357px 0px; + } + .iti__flag.iti__do { + height: 14px; + background-position: -1379px 0px; + } + .iti__flag.iti__dz { + height: 14px; + background-position: -1401px 0px; + } + .iti__flag.iti__ea { + height: 14px; + background-position: -1423px 0px; + } + .iti__flag.iti__ec { + height: 14px; + background-position: -1445px 0px; + } + .iti__flag.iti__ee { + height: 13px; + background-position: -1467px 0px; + } + .iti__flag.iti__eg { + height: 14px; + background-position: -1489px 0px; + } + .iti__flag.iti__eh { + height: 10px; + background-position: -1511px 0px; + } + .iti__flag.iti__er { + height: 10px; + background-position: -1533px 0px; + } + .iti__flag.iti__es { + height: 14px; + background-position: -1555px 0px; + } + .iti__flag.iti__et { + height: 10px; + background-position: -1577px 0px; + } + .iti__flag.iti__eu { + height: 14px; + background-position: -1599px 0px; + } + .iti__flag.iti__fi { + height: 12px; + background-position: -1621px 0px; + } + .iti__flag.iti__fj { + height: 10px; + background-position: -1643px 0px; + } + .iti__flag.iti__fk { + height: 10px; + background-position: -1665px 0px; + } + .iti__flag.iti__fm { + height: 11px; + background-position: -1687px 0px; + } + .iti__flag.iti__fo { + height: 15px; + background-position: -1709px 0px; + } + .iti__flag.iti__fr { + height: 14px; + background-position: -1731px 0px; + } + .iti__flag.iti__ga { + height: 15px; + background-position: -1753px 0px; + } + .iti__flag.iti__gb { + height: 10px; + background-position: -1775px 0px; + } + .iti__flag.iti__gd { + height: 12px; + background-position: -1797px 0px; + } + .iti__flag.iti__ge { + height: 14px; + background-position: -1819px 0px; + } + .iti__flag.iti__gf { + height: 14px; + background-position: -1841px 0px; + } + .iti__flag.iti__gg { + height: 14px; + background-position: -1863px 0px; + } + .iti__flag.iti__gh { + height: 14px; + background-position: -1885px 0px; + } + .iti__flag.iti__gi { + height: 10px; + background-position: -1907px 0px; + } + .iti__flag.iti__gl { + height: 14px; + background-position: -1929px 0px; + } + .iti__flag.iti__gm { + height: 14px; + background-position: -1951px 0px; + } + .iti__flag.iti__gn { + height: 14px; + background-position: -1973px 0px; + } + .iti__flag.iti__gp { + height: 14px; + background-position: -1995px 0px; + } + .iti__flag.iti__gq { + height: 14px; + background-position: -2017px 0px; + } + .iti__flag.iti__gr { + height: 14px; + background-position: -2039px 0px; + } + .iti__flag.iti__gs { + height: 10px; + background-position: -2061px 0px; + } + .iti__flag.iti__gt { + height: 13px; + background-position: -2083px 0px; + } + .iti__flag.iti__gu { + height: 11px; + background-position: -2105px 0px; + } + .iti__flag.iti__gw { + height: 10px; + background-position: -2127px 0px; + } + .iti__flag.iti__gy { + height: 12px; + background-position: -2149px 0px; + } + .iti__flag.iti__hk { + height: 14px; + background-position: -2171px 0px; + } + .iti__flag.iti__hm { + height: 10px; + background-position: -2193px 0px; + } + .iti__flag.iti__hn { + height: 10px; + background-position: -2215px 0px; + } + .iti__flag.iti__hr { + height: 10px; + background-position: -2237px 0px; + } + .iti__flag.iti__ht { + height: 12px; + background-position: -2259px 0px; + } + .iti__flag.iti__hu { + height: 10px; + background-position: -2281px 0px; + } + .iti__flag.iti__ic { + height: 14px; + background-position: -2303px 0px; + } + .iti__flag.iti__id { + height: 14px; + background-position: -2325px 0px; + } + .iti__flag.iti__ie { + height: 10px; + background-position: -2347px 0px; + } + .iti__flag.iti__il { + height: 15px; + background-position: -2369px 0px; + } + .iti__flag.iti__im { + height: 10px; + background-position: -2391px 0px; + } + .iti__flag.iti__in { + height: 14px; + background-position: -2413px 0px; + } + .iti__flag.iti__io { + height: 10px; + background-position: -2435px 0px; + } + .iti__flag.iti__iq { + height: 14px; + background-position: -2457px 0px; + } + .iti__flag.iti__ir { + height: 12px; + background-position: -2479px 0px; + } + .iti__flag.iti__is { + height: 15px; + background-position: -2501px 0px; + } + .iti__flag.iti__it { + height: 14px; + background-position: -2523px 0px; + } + .iti__flag.iti__je { + height: 12px; + background-position: -2545px 0px; + } + .iti__flag.iti__jm { + height: 10px; + background-position: -2567px 0px; + } + .iti__flag.iti__jo { + height: 10px; + background-position: -2589px 0px; + } + .iti__flag.iti__jp { + height: 14px; + background-position: -2611px 0px; + } + .iti__flag.iti__ke { + height: 14px; + background-position: -2633px 0px; + } + .iti__flag.iti__kg { + height: 12px; + background-position: -2655px 0px; + } + .iti__flag.iti__kh { + height: 13px; + background-position: -2677px 0px; + } + .iti__flag.iti__ki { + height: 10px; + background-position: -2699px 0px; + } + .iti__flag.iti__km { + height: 12px; + background-position: -2721px 0px; + } + .iti__flag.iti__kn { + height: 14px; + background-position: -2743px 0px; + } + .iti__flag.iti__kp { + height: 10px; + background-position: -2765px 0px; + } + .iti__flag.iti__kr { + height: 14px; + background-position: -2787px 0px; + } + .iti__flag.iti__kw { + height: 10px; + background-position: -2809px 0px; + } + .iti__flag.iti__ky { + height: 10px; + background-position: -2831px 0px; + } + .iti__flag.iti__kz { + height: 10px; + background-position: -2853px 0px; + } + .iti__flag.iti__la { + height: 14px; + background-position: -2875px 0px; + } + .iti__flag.iti__lb { + height: 14px; + background-position: -2897px 0px; + } + .iti__flag.iti__lc { + height: 10px; + background-position: -2919px 0px; + } + .iti__flag.iti__li { + height: 12px; + background-position: -2941px 0px; + } + .iti__flag.iti__lk { + height: 10px; + background-position: -2963px 0px; + } + .iti__flag.iti__lr { + height: 11px; + background-position: -2985px 0px; + } + .iti__flag.iti__ls { + height: 14px; + background-position: -3007px 0px; + } + .iti__flag.iti__lt { + height: 12px; + background-position: -3029px 0px; + } + .iti__flag.iti__lu { + height: 12px; + background-position: -3051px 0px; + } + .iti__flag.iti__lv { + height: 10px; + background-position: -3073px 0px; + } + .iti__flag.iti__ly { + height: 10px; + background-position: -3095px 0px; + } + .iti__flag.iti__ma { + height: 14px; + background-position: -3117px 0px; + } + .iti__flag.iti__mc { + height: 15px; + background-position: -3139px 0px; + } + .iti__flag.iti__md { + height: 10px; + background-position: -3160px 0px; + } + .iti__flag.iti__me { + height: 10px; + background-position: -3182px 0px; + } + .iti__flag.iti__mf { + height: 14px; + background-position: -3204px 0px; + } + .iti__flag.iti__mg { + height: 14px; + background-position: -3226px 0px; + } + .iti__flag.iti__mh { + height: 11px; + background-position: -3248px 0px; + } + .iti__flag.iti__mk { + height: 10px; + background-position: -3270px 0px; + } + .iti__flag.iti__ml { + height: 14px; + background-position: -3292px 0px; + } + .iti__flag.iti__mm { + height: 14px; + background-position: -3314px 0px; + } + .iti__flag.iti__mn { + height: 10px; + background-position: -3336px 0px; + } + .iti__flag.iti__mo { + height: 14px; + background-position: -3358px 0px; + } + .iti__flag.iti__mp { + height: 10px; + background-position: -3380px 0px; + } + .iti__flag.iti__mq { + height: 14px; + background-position: -3402px 0px; + } + .iti__flag.iti__mr { + height: 14px; + background-position: -3424px 0px; + } + .iti__flag.iti__ms { + height: 10px; + background-position: -3446px 0px; + } + .iti__flag.iti__mt { + height: 14px; + background-position: -3468px 0px; + } + .iti__flag.iti__mu { + height: 14px; + background-position: -3490px 0px; + } + .iti__flag.iti__mv { + height: 14px; + background-position: -3512px 0px; + } + .iti__flag.iti__mw { + height: 14px; + background-position: -3534px 0px; + } + .iti__flag.iti__mx { + height: 12px; + background-position: -3556px 0px; + } + .iti__flag.iti__my { + height: 10px; + background-position: -3578px 0px; + } + .iti__flag.iti__mz { + height: 14px; + background-position: -3600px 0px; + } + .iti__flag.iti__na { + height: 14px; + background-position: -3622px 0px; + } + .iti__flag.iti__nc { + height: 10px; + background-position: -3644px 0px; + } + .iti__flag.iti__ne { + height: 15px; + background-position: -3666px 0px; + } + .iti__flag.iti__nf { + height: 10px; + background-position: -3686px 0px; + } + .iti__flag.iti__ng { + height: 10px; + background-position: -3708px 0px; + } + .iti__flag.iti__ni { + height: 12px; + background-position: -3730px 0px; + } + .iti__flag.iti__nl { + height: 14px; + background-position: -3752px 0px; + } + .iti__flag.iti__no { + height: 15px; + background-position: -3774px 0px; + } + .iti__flag.iti__np { + height: 15px; + background-position: -3796px 0px; + } + .iti__flag.iti__nr { + height: 10px; + background-position: -3811px 0px; + } + .iti__flag.iti__nu { + height: 10px; + background-position: -3833px 0px; + } + .iti__flag.iti__nz { + height: 10px; + background-position: -3855px 0px; + } + .iti__flag.iti__om { + height: 10px; + background-position: -3877px 0px; + } + .iti__flag.iti__pa { + height: 14px; + background-position: -3899px 0px; + } + .iti__flag.iti__pe { + height: 14px; + background-position: -3921px 0px; + } + .iti__flag.iti__pf { + height: 14px; + background-position: -3943px 0px; + } + .iti__flag.iti__pg { + height: 15px; + background-position: -3965px 0px; + } + .iti__flag.iti__ph { + height: 10px; + background-position: -3987px 0px; + } + .iti__flag.iti__pk { + height: 14px; + background-position: -4009px 0px; + } + .iti__flag.iti__pl { + height: 13px; + background-position: -4031px 0px; + } + .iti__flag.iti__pm { + height: 14px; + background-position: -4053px 0px; + } + .iti__flag.iti__pn { + height: 10px; + background-position: -4075px 0px; + } + .iti__flag.iti__pr { + height: 14px; + background-position: -4097px 0px; + } + .iti__flag.iti__ps { + height: 10px; + background-position: -4119px 0px; + } + .iti__flag.iti__pt { + height: 14px; + background-position: -4141px 0px; + } + .iti__flag.iti__pw { + height: 13px; + background-position: -4163px 0px; + } + .iti__flag.iti__py { + height: 11px; + background-position: -4185px 0px; + } + .iti__flag.iti__qa { + height: 8px; + background-position: -4207px 0px; + } + .iti__flag.iti__re { + height: 14px; + background-position: -4229px 0px; + } + .iti__flag.iti__ro { + height: 14px; + background-position: -4251px 0px; + } + .iti__flag.iti__rs { + height: 14px; + background-position: -4273px 0px; + } + .iti__flag.iti__ru { + height: 14px; + background-position: -4295px 0px; + } + .iti__flag.iti__rw { + height: 14px; + background-position: -4317px 0px; + } + .iti__flag.iti__sa { + height: 14px; + background-position: -4339px 0px; + } + .iti__flag.iti__sb { + height: 10px; + background-position: -4361px 0px; + } + .iti__flag.iti__sc { + height: 10px; + background-position: -4383px 0px; + } + .iti__flag.iti__sd { + height: 10px; + background-position: -4405px 0px; + } + .iti__flag.iti__se { + height: 13px; + background-position: -4427px 0px; + } + .iti__flag.iti__sg { + height: 14px; + background-position: -4449px 0px; + } + .iti__flag.iti__sh { + height: 10px; + background-position: -4471px 0px; + } + .iti__flag.iti__si { + height: 10px; + background-position: -4493px 0px; + } + .iti__flag.iti__sj { + height: 15px; + background-position: -4515px 0px; + } + .iti__flag.iti__sk { + height: 14px; + background-position: -4537px 0px; + } + .iti__flag.iti__sl { + height: 14px; + background-position: -4559px 0px; + } + .iti__flag.iti__sm { + height: 15px; + background-position: -4581px 0px; + } + .iti__flag.iti__sn { + height: 14px; + background-position: -4603px 0px; + } + .iti__flag.iti__so { + height: 14px; + background-position: -4625px 0px; + } + .iti__flag.iti__sr { + height: 14px; + background-position: -4647px 0px; + } + .iti__flag.iti__ss { + height: 10px; + background-position: -4669px 0px; + } + .iti__flag.iti__st { + height: 10px; + background-position: -4691px 0px; + } + .iti__flag.iti__sv { + height: 12px; + background-position: -4713px 0px; + } + .iti__flag.iti__sx { + height: 14px; + background-position: -4735px 0px; + } + .iti__flag.iti__sy { + height: 14px; + background-position: -4757px 0px; + } + .iti__flag.iti__sz { + height: 14px; + background-position: -4779px 0px; + } + .iti__flag.iti__ta { + height: 10px; + background-position: -4801px 0px; + } + .iti__flag.iti__tc { + height: 10px; + background-position: -4823px 0px; + } + .iti__flag.iti__td { + height: 14px; + background-position: -4845px 0px; + } + .iti__flag.iti__tf { + height: 14px; + background-position: -4867px 0px; + } + .iti__flag.iti__tg { + height: 13px; + background-position: -4889px 0px; + } + .iti__flag.iti__th { + height: 14px; + background-position: -4911px 0px; + } + .iti__flag.iti__tj { + height: 10px; + background-position: -4933px 0px; + } + .iti__flag.iti__tk { + height: 10px; + background-position: -4955px 0px; + } + .iti__flag.iti__tl { + height: 10px; + background-position: -4977px 0px; + } + .iti__flag.iti__tm { + height: 14px; + background-position: -4999px 0px; + } + .iti__flag.iti__tn { + height: 14px; + background-position: -5021px 0px; + } + .iti__flag.iti__to { + height: 10px; + background-position: -5043px 0px; + } + .iti__flag.iti__tr { + height: 14px; + background-position: -5065px 0px; + } + .iti__flag.iti__tt { + height: 12px; + background-position: -5087px 0px; + } + .iti__flag.iti__tv { + height: 10px; + background-position: -5109px 0px; + } + .iti__flag.iti__tw { + height: 14px; + background-position: -5131px 0px; + } + .iti__flag.iti__tz { + height: 14px; + background-position: -5153px 0px; + } + .iti__flag.iti__ua { + height: 14px; + background-position: -5175px 0px; + } + .iti__flag.iti__ug { + height: 14px; + background-position: -5197px 0px; + } + .iti__flag.iti__um { + height: 11px; + background-position: -5219px 0px; + } + .iti__flag.iti__un { + height: 14px; + background-position: -5241px 0px; + } + .iti__flag.iti__us { + height: 11px; + background-position: -5263px 0px; + } + .iti__flag.iti__uy { + height: 14px; + background-position: -5285px 0px; + } + .iti__flag.iti__uz { + height: 10px; + background-position: -5307px 0px; + } + .iti__flag.iti__va { + height: 15px; + background-position: -5329px 0px; + } + .iti__flag.iti__vc { + height: 14px; + background-position: -5346px 0px; + } + .iti__flag.iti__ve { + height: 14px; + background-position: -5368px 0px; + } + .iti__flag.iti__vg { + height: 10px; + background-position: -5390px 0px; + } + .iti__flag.iti__vi { + height: 14px; + background-position: -5412px 0px; + } + .iti__flag.iti__vn { + height: 14px; + background-position: -5434px 0px; + } + .iti__flag.iti__vu { + height: 12px; + background-position: -5456px 0px; + } + .iti__flag.iti__wf { + height: 14px; + background-position: -5478px 0px; + } + .iti__flag.iti__ws { + height: 10px; + background-position: -5500px 0px; + } + .iti__flag.iti__xk { + height: 15px; + background-position: -5522px 0px; + } + .iti__flag.iti__ye { + height: 14px; + background-position: -5544px 0px; + } + .iti__flag.iti__yt { + height: 14px; + background-position: -5566px 0px; + } + .iti__flag.iti__za { + height: 14px; + background-position: -5588px 0px; + } + .iti__flag.iti__zm { + height: 14px; + background-position: -5610px 0px; + } + .iti__flag.iti__zw { + height: 10px; + background-position: -5632px 0px; + } + + .iti__flag { + height: 15px; + box-shadow: 0px 0px 1px 0px #888; + background-image: url(${flagsImgUrl}); + background-repeat: no-repeat; + background-color: #dbdbdb; + background-position: 20px 0; + } + @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) { + .iti__flag { + background-image: url(${flagsImg2xUrl}); + } + } + + .iti__flag.iti__np { + background-color: transparent; + } +`; diff --git a/docs/components/inputs/select-rich/src/flags.png b/docs/components/inputs/select-rich/src/flags.png new file mode 100644 index 0000000000000000000000000000000000000000..3fa1bec9fbb5dc85e375efff7510ab79f5a0e020 GIT binary patch literal 70857 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 LNkvXXu0mjfG;JOG literal 0 HcmV?d00001 diff --git a/docs/components/inputs/select-rich/src/flags@2x.png b/docs/components/inputs/select-rich/src/flags@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7cc3ed3fba34e6e23f2dcf5f300898ef4e2fbd0d GIT binary patch literal 174369 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

1coj(6bdsU5HH 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

rwRU|s)cNLjgI$ha?`vHjw_;(_Jf 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%0DxAJw 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 literal 0 HcmV?d00001 diff --git a/docs/components/inputs/select-rich/src/intl-select-rich.js b/docs/components/inputs/select-rich/src/intl-select-rich.js new file mode 100644 index 000000000..699f1247b --- /dev/null +++ b/docs/components/inputs/select-rich/src/intl-select-rich.js @@ -0,0 +1,193 @@ +import { html, css, LitElement } from '@lion/core'; +import { LionSelectRich, LionOption, LionSelectInvoker } from '@lion/select-rich'; +import { flagStyles } from './flagStyles.js'; + +/** + * @typedef {import('@lion/core').RenderOptions} RenderOptions + * @typedef {import('@lion/input-tel/types/types').RegionAndCountryCode} RegionAndCountryCode + * @typedef {import('@lion/input-tel/types/types').TemplateDataForDropdownInputTel} TemplateDataForDropdownInputTel + * @typedef {{countryCode: string; regionCode: string; nameForRegion: string; nameForLocale: string}} RegionMetaList + * @typedef {TemplateDataForDropdownInputTel & {data: {regionMetaList:RegionMetaList}}} TemplateDataForIntlInputTel + */ + +export class IntlOption extends LionOption { + static properties = { regionMeta: { type: Object } }; + + static styles = [ + super.styles, + flagStyles, + css` + :host { + padding: 5px 10px; + outline: none; + } + + :host(:hover), + :host([active]), + :host([checked]) { + background-color: rgba(0, 0, 0, 0.05); + } + `, + ]; + + get _regionCode() { + return this.choiceValue?.toUpperCase(); + } + + render() { + const ctor = /** @type {typeof IntlOption} */ (this.constructor); + return ctor._contentTemplate({ + data: this.regionMeta, + }); + } + + static _contentTemplate({ data: { regionCode, countryCode, nameForLocale, nameForRegion } }) { + return html` +

+
+
+ ${nameForLocale} (${nameForRegion}) + +${countryCode} + `; + } +} +customElements.define('intl-option', IntlOption); + +class IntlSelectInvoker extends LionSelectInvoker { + /** + * @configure LitElement + * @enhance LionSelectInvoker + */ + static styles = [ + super.styles, + flagStyles, + css` + :host { + /** TODO: avoid importants; should actually be configured in overlay */ + width: auto !important; + background-color: transparent; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + } + + #content-wrapper { + display: flex; + align-items: center; + } + `, + ]; + + /** + * @configure SlotMixin + * @override LionSelectInvoker + */ + get slots() { + return {}; + } + + /** + * @override LionSelectInvoker + */ + render() { + const ctor = /** @type {typeof LionSelectInvoker} */ (this.constructor); + return ctor._mainTemplate(this._templateData); + } + + get _templateData() { + return { + data: { selectedElement: this.selectedElement, hostElement: this.hostElement }, + }; + } + + static _mainTemplate(templateData) { + return html`
${this._contentTemplate(templateData)}
`; + } + + static _contentTemplate({ data: { selectedElement, hostElement } }) { + if (!selectedElement) { + return ``; + } + return html` +
+
+ `; + } +} +customElements.define('intl-select-invoker', IntlSelectInvoker); + +export class IntlSeparator extends LitElement { + static styles = [ + css` + :host { + display: block; + padding-bottom: 5px; + margin-bottom: 5px; + border-bottom: 1px solid #ccc; + } + `, + ]; + + /** + * @lifecycle platform + */ + connectedCallback() { + super.connectedCallback(); + this.setAttribute('role', 'separator'); + } +} +customElements.define('intl-separator', IntlSeparator); + +export class IntlSelectRich extends LionSelectRich { + static styles = [ + super.styles, + css` + :host, + ::slotted(*) { + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + } + + ::slotted([role='listbox']) { + margin-left: -3px; + display: block; + white-space: nowrap; + max-height: 200px; + overflow-y: scroll; + position: absolute; + z-index: 2; + list-style: none; + text-align: left; + padding: 0; + margin: 0 0 0 -1px; + box-shadow: 1px 1px 4px rgb(0 0 0 / 20%); + background-color: white; + border: 1px solid #ccc; + -webkit-overflow-scrolling: touch; + outline: none; + } + + .form-field__group-two, + .input-group, + .input-group__container, + .input-group__input { + height: 100%; + } + `, + ]; + + /** + * @configure ScopedElementsMixin + */ + static scopedElements = { 'intl-select-invoker': IntlSelectInvoker }; + + /** + * @configure SlotMixin + */ + slots = { + ...super.slots, + invoker: () => html``, + }; +} +customElements.define('intl-select-rich', IntlSelectRich); diff --git a/docs/components/inputs/select-rich/src/regionMetaList.js b/docs/components/inputs/select-rich/src/regionMetaList.js new file mode 100644 index 000000000..6fee46ece --- /dev/null +++ b/docs/components/inputs/select-rich/src/regionMetaList.js @@ -0,0 +1,1717 @@ +export const regionMetaList = [ + { + regionCode: 'AC', + countryCode: 247, + flagSymbol: '🇦🇨', + nameForLocale: 'Ascension Island', + nameForRegion: 'Ascension Island', + }, + { + regionCode: 'AD', + countryCode: 376, + flagSymbol: '🇦🇩', + nameForLocale: 'Andorra', + nameForRegion: 'Andorra', + }, + { + regionCode: 'AE', + countryCode: 971, + flagSymbol: '🇦🇪', + nameForLocale: 'United Arab Emirates', + nameForRegion: 'United Arab Emirates', + }, + { + regionCode: 'AF', + countryCode: 93, + flagSymbol: '🇦🇫', + nameForLocale: 'Afghanistan', + nameForRegion: 'Afghanistan', + }, + { + regionCode: 'AG', + countryCode: 1, + flagSymbol: '🇦🇬', + nameForLocale: 'Antigua & Barbuda', + nameForRegion: 'Antigua & Barbuda', + }, + { + regionCode: 'AI', + countryCode: 1, + flagSymbol: '🇦🇮', + nameForLocale: 'Anguilla', + nameForRegion: 'Anguilla', + }, + { + regionCode: 'AL', + countryCode: 355, + flagSymbol: '🇦🇱', + nameForLocale: 'Albania', + nameForRegion: 'Albania', + }, + { + regionCode: 'AM', + countryCode: 374, + flagSymbol: '🇦🇲', + nameForLocale: 'Armenia', + nameForRegion: 'አርሜኒያ', + }, + { + regionCode: 'AO', + countryCode: 244, + flagSymbol: '🇦🇴', + nameForLocale: 'Angola', + nameForRegion: 'Angola', + }, + { + regionCode: 'AR', + countryCode: 54, + flagSymbol: '🇦🇷', + nameForLocale: 'Argentina', + nameForRegion: 'الأرجنتين', + }, + { + regionCode: 'AS', + countryCode: 1, + flagSymbol: '🇦🇸', + nameForLocale: 'American Samoa', + nameForRegion: 'American Samoa', + }, + { + regionCode: 'AT', + countryCode: 43, + flagSymbol: '🇦🇹', + nameForLocale: 'Austria', + nameForRegion: 'Austria', + }, + { + regionCode: 'AU', + countryCode: 61, + flagSymbol: '🇦🇺', + nameForLocale: 'Australia', + nameForRegion: 'Australia', + }, + { + regionCode: 'AW', + countryCode: 297, + flagSymbol: '🇦🇼', + nameForLocale: 'Aruba', + nameForRegion: 'Aruba', + }, + { + regionCode: 'AX', + countryCode: 358, + flagSymbol: '🇦🇽', + nameForLocale: 'Åland Islands', + nameForRegion: 'Åland Islands', + }, + { + regionCode: 'AZ', + countryCode: 994, + flagSymbol: '🇦🇿', + nameForLocale: 'Azerbaijan', + nameForRegion: 'Azerbaijan', + }, + { + regionCode: 'BA', + countryCode: 387, + flagSymbol: '🇧🇦', + nameForLocale: 'Bosnia & Herzegovina', + nameForRegion: 'Bosnia & Herzegovina', + }, + { + regionCode: 'BB', + countryCode: 1, + flagSymbol: '🇧🇧', + nameForLocale: 'Barbados', + nameForRegion: 'Barbados', + }, + { + regionCode: 'BD', + countryCode: 880, + flagSymbol: '🇧🇩', + nameForLocale: 'Bangladesh', + nameForRegion: 'Bangladesh', + }, + { + regionCode: 'BE', + countryCode: 32, + flagSymbol: '🇧🇪', + nameForLocale: 'Belgium', + nameForRegion: 'Belgium', + }, + { + regionCode: 'BF', + countryCode: 226, + flagSymbol: '🇧🇫', + nameForLocale: 'Burkina Faso', + nameForRegion: 'Burkina Faso', + }, + { + regionCode: 'BG', + countryCode: 359, + flagSymbol: '🇧🇬', + nameForLocale: 'Bulgaria', + nameForRegion: 'България', + }, + { + regionCode: 'BH', + countryCode: 973, + flagSymbol: '🇧🇭', + nameForLocale: 'Bahrain', + nameForRegion: 'Bahrain', + }, + { + regionCode: 'BI', + countryCode: 257, + flagSymbol: '🇧🇮', + nameForLocale: 'Burundi', + nameForRegion: 'Burundi', + }, + { + regionCode: 'BJ', + countryCode: 229, + flagSymbol: '🇧🇯', + nameForLocale: 'Benin', + nameForRegion: 'Benin', + }, + { + regionCode: 'BL', + countryCode: 590, + flagSymbol: '🇧🇱', + nameForLocale: 'St. Barthélemy', + nameForRegion: 'St Barthélemy', + }, + { + regionCode: 'BM', + countryCode: 1, + flagSymbol: '🇧🇲', + nameForLocale: 'Bermuda', + nameForRegion: 'Bermuda', + }, + { + regionCode: 'BN', + countryCode: 673, + flagSymbol: '🇧🇳', + nameForLocale: 'Brunei', + nameForRegion: 'ব্রুনেই', + }, + { + regionCode: 'BO', + countryCode: 591, + flagSymbol: '🇧🇴', + nameForLocale: 'Bolivia', + nameForRegion: 'Bolivia', + }, + { + regionCode: 'BQ', + countryCode: 599, + flagSymbol: '🇧🇶', + nameForLocale: 'Caribbean Netherlands', + nameForRegion: 'Caribbean Netherlands', + }, + { + regionCode: 'BR', + countryCode: 55, + flagSymbol: '🇧🇷', + nameForLocale: 'Brazil', + nameForRegion: 'Brazil', + }, + { + regionCode: 'BS', + countryCode: 1, + flagSymbol: '🇧🇸', + nameForLocale: 'Bahamas', + nameForRegion: 'Bahamas', + }, + { + regionCode: 'BT', + countryCode: 975, + flagSymbol: '🇧🇹', + nameForLocale: 'Bhutan', + nameForRegion: 'Bhutan', + }, + { + regionCode: 'BW', + countryCode: 267, + flagSymbol: '🇧🇼', + nameForLocale: 'Botswana', + nameForRegion: 'Botswana', + }, + { + regionCode: 'BY', + countryCode: 375, + flagSymbol: '🇧🇾', + nameForLocale: 'Belarus', + nameForRegion: 'Belarus', + }, + { + regionCode: 'BZ', + countryCode: 501, + flagSymbol: '🇧🇿', + nameForLocale: 'Belize', + nameForRegion: 'Belize', + }, + { + regionCode: 'CA', + countryCode: 1, + flagSymbol: '🇨🇦', + nameForLocale: 'Canada', + nameForRegion: 'Canadà', + }, + { + regionCode: 'CC', + countryCode: 61, + flagSymbol: '🇨🇨', + nameForLocale: 'Cocos (Keeling) Islands', + nameForRegion: 'Cocos (Keeling) Islands', + }, + { + regionCode: 'CD', + countryCode: 243, + flagSymbol: '🇨🇩', + nameForLocale: 'Congo - Kinshasa', + nameForRegion: 'Congo - Kinshasa', + }, + { + regionCode: 'CF', + countryCode: 236, + flagSymbol: '🇨🇫', + nameForLocale: 'Central African Republic', + nameForRegion: 'Central African Republic', + }, + { + regionCode: 'CG', + countryCode: 242, + flagSymbol: '🇨🇬', + nameForLocale: 'Congo - Brazzaville', + nameForRegion: 'Congo - Brazzaville', + }, + { + regionCode: 'CH', + countryCode: 41, + flagSymbol: '🇨🇭', + nameForLocale: 'Switzerland', + nameForRegion: 'Switzerland', + }, + { + regionCode: 'CI', + countryCode: 225, + flagSymbol: '🇨🇮', + nameForLocale: 'Côte d’Ivoire', + nameForRegion: 'Côte d’Ivoire', + }, + { + regionCode: 'CK', + countryCode: 682, + flagSymbol: '🇨🇰', + nameForLocale: 'Cook Islands', + nameForRegion: 'Cook Islands', + }, + { + regionCode: 'CL', + countryCode: 56, + flagSymbol: '🇨🇱', + nameForLocale: 'Chile', + nameForRegion: 'Chile', + }, + { + regionCode: 'CM', + countryCode: 237, + flagSymbol: '🇨🇲', + nameForLocale: 'Cameroon', + nameForRegion: 'Cameroon', + }, + { + regionCode: 'CN', + countryCode: 86, + flagSymbol: '🇨🇳', + nameForLocale: 'China', + nameForRegion: 'China', + }, + { + regionCode: 'CO', + countryCode: 57, + flagSymbol: '🇨🇴', + nameForLocale: 'Colombia', + nameForRegion: 'Colombia', + }, + { + regionCode: 'CR', + countryCode: 506, + flagSymbol: '🇨🇷', + nameForLocale: 'Costa Rica', + nameForRegion: 'Costa Rica', + }, + { + regionCode: 'CU', + countryCode: 53, + flagSymbol: '🇨🇺', + nameForLocale: 'Cuba', + nameForRegion: 'Cuba', + }, + { + regionCode: 'CV', + countryCode: 238, + flagSymbol: '🇨🇻', + nameForLocale: 'Cape Verde', + nameForRegion: 'Cape Verde', + }, + { + regionCode: 'CW', + countryCode: 599, + flagSymbol: '🇨🇼', + nameForLocale: 'Curaçao', + nameForRegion: 'Curaçao', + }, + { + regionCode: 'CX', + countryCode: 61, + flagSymbol: '🇨🇽', + nameForLocale: 'Christmas Island', + nameForRegion: 'Christmas Island', + }, + { + regionCode: 'CY', + countryCode: 357, + flagSymbol: '🇨🇾', + nameForLocale: 'Cyprus', + nameForRegion: 'Cyprus', + }, + { + regionCode: 'CZ', + countryCode: 420, + flagSymbol: '🇨🇿', + nameForLocale: 'Czechia', + nameForRegion: 'Czechia', + }, + { + regionCode: 'DE', + countryCode: 49, + flagSymbol: '🇩🇪', + nameForLocale: 'Germany', + nameForRegion: 'Deutschland', + }, + { + regionCode: 'DJ', + countryCode: 253, + flagSymbol: '🇩🇯', + nameForLocale: 'Djibouti', + nameForRegion: 'Djibouti', + }, + { + regionCode: 'DK', + countryCode: 45, + flagSymbol: '🇩🇰', + nameForLocale: 'Denmark', + nameForRegion: 'Denmark', + }, + { + regionCode: 'DM', + countryCode: 1, + flagSymbol: '🇩🇲', + nameForLocale: 'Dominica', + nameForRegion: 'Dominica', + }, + { + regionCode: 'DO', + countryCode: 1, + flagSymbol: '🇩🇴', + nameForLocale: 'Dominican Republic', + nameForRegion: 'Dominican Republic', + }, + { + regionCode: 'DZ', + countryCode: 213, + flagSymbol: '🇩🇿', + nameForLocale: 'Algeria', + nameForRegion: 'Algeria', + }, + { + regionCode: 'EC', + countryCode: 593, + flagSymbol: '🇪🇨', + nameForLocale: 'Ecuador', + nameForRegion: 'Ecuador', + }, + { + regionCode: 'EE', + countryCode: 372, + flagSymbol: '🇪🇪', + nameForLocale: 'Estonia', + nameForRegion: 'Estonia', + }, + { + regionCode: 'EG', + countryCode: 20, + flagSymbol: '🇪🇬', + nameForLocale: 'Egypt', + nameForRegion: 'Egypt', + }, + { + regionCode: 'EH', + countryCode: 212, + flagSymbol: '🇪🇭', + nameForLocale: 'Western Sahara', + nameForRegion: 'Western Sahara', + }, + { + regionCode: 'ER', + countryCode: 291, + flagSymbol: '🇪🇷', + nameForLocale: 'Eritrea', + nameForRegion: 'Eritrea', + }, + { + regionCode: 'ES', + countryCode: 34, + flagSymbol: '🇪🇸', + nameForLocale: 'Spain', + nameForRegion: 'España', + }, + { + regionCode: 'ET', + countryCode: 251, + flagSymbol: '🇪🇹', + nameForLocale: 'Ethiopia', + nameForRegion: 'Etioopia', + }, + { + regionCode: 'FI', + countryCode: 358, + flagSymbol: '🇫🇮', + nameForLocale: 'Finland', + nameForRegion: 'Suomi', + }, + { + regionCode: 'FJ', + countryCode: 679, + flagSymbol: '🇫🇯', + nameForLocale: 'Fiji', + nameForRegion: 'Fiji', + }, + { + regionCode: 'FK', + countryCode: 500, + flagSymbol: '🇫🇰', + nameForLocale: 'Falkland Islands (Islas Malvinas)', + nameForRegion: 'Falkland Islands (Islas Malvinas)', + }, + { + regionCode: 'FM', + countryCode: 691, + flagSymbol: '🇫🇲', + nameForLocale: 'Micronesia', + nameForRegion: 'Micronesia', + }, + { + regionCode: 'FO', + countryCode: 298, + flagSymbol: '🇫🇴', + nameForLocale: 'Faroe Islands', + nameForRegion: 'Faroe Islands', + }, + { + regionCode: 'FR', + countryCode: 33, + flagSymbol: '🇫🇷', + nameForLocale: 'France', + nameForRegion: 'France', + }, + { + regionCode: 'GA', + countryCode: 241, + flagSymbol: '🇬🇦', + nameForLocale: 'Gabon', + nameForRegion: 'Gabon', + }, + { + regionCode: 'GB', + countryCode: 44, + flagSymbol: '🇬🇧', + nameForLocale: 'United Kingdom', + nameForRegion: 'United Kingdom', + }, + { + regionCode: 'GD', + countryCode: 1, + flagSymbol: '🇬🇩', + nameForLocale: 'Grenada', + nameForRegion: 'Grenada', + }, + { + regionCode: 'GE', + countryCode: 995, + flagSymbol: '🇬🇪', + nameForLocale: 'Georgia', + nameForRegion: 'Georgia', + }, + { + regionCode: 'GF', + countryCode: 594, + flagSymbol: '🇬🇫', + nameForLocale: 'French Guiana', + nameForRegion: 'French Guiana', + }, + { + regionCode: 'GG', + countryCode: 44, + flagSymbol: '🇬🇬', + nameForLocale: 'Guernsey', + nameForRegion: 'Guernsey', + }, + { + regionCode: 'GH', + countryCode: 233, + flagSymbol: '🇬🇭', + nameForLocale: 'Ghana', + nameForRegion: 'Ghana', + }, + { + regionCode: 'GI', + countryCode: 350, + flagSymbol: '🇬🇮', + nameForLocale: 'Gibraltar', + nameForRegion: 'Gibraltar', + }, + { + regionCode: 'GL', + countryCode: 299, + flagSymbol: '🇬🇱', + nameForLocale: 'Greenland', + nameForRegion: 'Greenland', + }, + { + regionCode: 'GM', + countryCode: 220, + flagSymbol: '🇬🇲', + nameForLocale: 'Gambia', + nameForRegion: 'Gambia', + }, + { + regionCode: 'GN', + countryCode: 224, + flagSymbol: '🇬🇳', + nameForLocale: 'Guinea', + nameForRegion: 'Guinea', + }, + { + regionCode: 'GP', + countryCode: 590, + flagSymbol: '🇬🇵', + nameForLocale: 'Guadeloupe', + nameForRegion: 'Guadeloupe', + }, + { + regionCode: 'GQ', + countryCode: 240, + flagSymbol: '🇬🇶', + nameForLocale: 'Equatorial Guinea', + nameForRegion: 'Equatorial Guinea', + }, + { + regionCode: 'GR', + countryCode: 30, + flagSymbol: '🇬🇷', + nameForLocale: 'Greece', + nameForRegion: 'Greece', + }, + { + regionCode: 'GT', + countryCode: 502, + flagSymbol: '🇬🇹', + nameForLocale: 'Guatemala', + nameForRegion: 'Guatemala', + }, + { + regionCode: 'GU', + countryCode: 1, + flagSymbol: '🇬🇺', + nameForLocale: 'Guam', + nameForRegion: 'ગ્વામ', + }, + { + regionCode: 'GW', + countryCode: 245, + flagSymbol: '🇬🇼', + nameForLocale: 'Guinea-Bissau', + nameForRegion: 'Guinea-Bissau', + }, + { + regionCode: 'GY', + countryCode: 592, + flagSymbol: '🇬🇾', + nameForLocale: 'Guyana', + nameForRegion: 'Guyana', + }, + { + regionCode: 'HK', + countryCode: 852, + flagSymbol: '🇭🇰', + nameForLocale: 'Hong Kong', + nameForRegion: 'Hong Kong', + }, + { + regionCode: 'HN', + countryCode: 504, + flagSymbol: '🇭🇳', + nameForLocale: 'Honduras', + nameForRegion: 'Honduras', + }, + { + regionCode: 'HR', + countryCode: 385, + flagSymbol: '🇭🇷', + nameForLocale: 'Croatia', + nameForRegion: 'Hrvatska', + }, + { + regionCode: 'HT', + countryCode: 509, + flagSymbol: '🇭🇹', + nameForLocale: 'Haiti', + nameForRegion: 'Haiti', + }, + { + regionCode: 'HU', + countryCode: 36, + flagSymbol: '🇭🇺', + nameForLocale: 'Hungary', + nameForRegion: 'Magyarország', + }, + { + regionCode: 'ID', + countryCode: 62, + flagSymbol: '🇮🇩', + nameForLocale: 'Indonesia', + nameForRegion: 'Indonesia', + }, + { + regionCode: 'IE', + countryCode: 353, + flagSymbol: '🇮🇪', + nameForLocale: 'Ireland', + nameForRegion: 'Ireland', + }, + { + regionCode: 'IL', + countryCode: 972, + flagSymbol: '🇮🇱', + nameForLocale: 'Israel', + nameForRegion: 'Israel', + }, + { + regionCode: 'IM', + countryCode: 44, + flagSymbol: '🇮🇲', + nameForLocale: 'Isle of Man', + nameForRegion: 'Isle of Man', + }, + { + regionCode: 'IN', + countryCode: 91, + flagSymbol: '🇮🇳', + nameForLocale: 'India', + nameForRegion: 'India', + }, + { + regionCode: 'IO', + countryCode: 246, + flagSymbol: '🇮🇴', + nameForLocale: 'British Indian Ocean Territory', + nameForRegion: 'British Indian Ocean Territory', + }, + { + regionCode: 'IQ', + countryCode: 964, + flagSymbol: '🇮🇶', + nameForLocale: 'Iraq', + nameForRegion: 'Iraq', + }, + { + regionCode: 'IR', + countryCode: 98, + flagSymbol: '🇮🇷', + nameForLocale: 'Iran', + nameForRegion: 'Iran', + }, + { + regionCode: 'IS', + countryCode: 354, + flagSymbol: '🇮🇸', + nameForLocale: 'Iceland', + nameForRegion: 'Iceland', + }, + { + regionCode: 'IT', + countryCode: 39, + flagSymbol: '🇮🇹', + nameForLocale: 'Italy', + nameForRegion: 'Italia', + }, + { + regionCode: 'JE', + countryCode: 44, + flagSymbol: '🇯🇪', + nameForLocale: 'Jersey', + nameForRegion: 'Jersey', + }, + { + regionCode: 'JM', + countryCode: 1, + flagSymbol: '🇯🇲', + nameForLocale: 'Jamaica', + nameForRegion: 'Jamaica', + }, + { + regionCode: 'JO', + countryCode: 962, + flagSymbol: '🇯🇴', + nameForLocale: 'Jordan', + nameForRegion: 'Jordan', + }, + { + regionCode: 'JP', + countryCode: 81, + flagSymbol: '🇯🇵', + nameForLocale: 'Japan', + nameForRegion: 'Japan', + }, + { + regionCode: 'KE', + countryCode: 254, + flagSymbol: '🇰🇪', + nameForLocale: 'Kenya', + nameForRegion: 'Kenya', + }, + { + regionCode: 'KG', + countryCode: 996, + flagSymbol: '🇰🇬', + nameForLocale: 'Kyrgyzstan', + nameForRegion: 'Kyrgyzstan', + }, + { + regionCode: 'KH', + countryCode: 855, + flagSymbol: '🇰🇭', + nameForLocale: 'Cambodia', + nameForRegion: 'Cambodia', + }, + { + regionCode: 'KI', + countryCode: 686, + flagSymbol: '🇰🇮', + nameForLocale: 'Kiribati', + nameForRegion: 'Kiribati', + }, + { + regionCode: 'KM', + countryCode: 269, + flagSymbol: '🇰🇲', + nameForLocale: 'Comoros', + nameForRegion: 'Comoros', + }, + { + regionCode: 'KN', + countryCode: 1, + flagSymbol: '🇰🇳', + nameForLocale: 'St. Kitts & Nevis', + nameForRegion: 'ಸೇಂಟ್ ಕಿಟ್ಸ್ ಮತ್ತು ನೆವಿಸ್', + }, + { + regionCode: 'KP', + countryCode: 850, + flagSymbol: '🇰🇵', + nameForLocale: 'North Korea', + nameForRegion: 'North Korea', + }, + { + regionCode: 'KR', + countryCode: 82, + flagSymbol: '🇰🇷', + nameForLocale: 'South Korea', + nameForRegion: 'South Korea', + }, + { + regionCode: 'KW', + countryCode: 965, + flagSymbol: '🇰🇼', + nameForLocale: 'Kuwait', + nameForRegion: 'Kuwait', + }, + { + regionCode: 'KY', + countryCode: 1, + flagSymbol: '🇰🇾', + nameForLocale: 'Cayman Islands', + nameForRegion: 'Cayman Islands', + }, + { + regionCode: 'KZ', + countryCode: 7, + flagSymbol: '🇰🇿', + nameForLocale: 'Kazakhstan', + nameForRegion: 'Kazakhstan', + }, + { + regionCode: 'LA', + countryCode: 856, + flagSymbol: '🇱🇦', + nameForLocale: 'Laos', + nameForRegion: 'Laos', + }, + { + regionCode: 'LB', + countryCode: 961, + flagSymbol: '🇱🇧', + nameForLocale: 'Lebanon', + nameForRegion: 'Lebanon', + }, + { + regionCode: 'LC', + countryCode: 1, + flagSymbol: '🇱🇨', + nameForLocale: 'St. Lucia', + nameForRegion: 'St Lucia', + }, + { + regionCode: 'LI', + countryCode: 423, + flagSymbol: '🇱🇮', + nameForLocale: 'Liechtenstein', + nameForRegion: 'Liechtenstein', + }, + { + regionCode: 'LK', + countryCode: 94, + flagSymbol: '🇱🇰', + nameForLocale: 'Sri Lanka', + nameForRegion: 'Sri Lanka', + }, + { + regionCode: 'LR', + countryCode: 231, + flagSymbol: '🇱🇷', + nameForLocale: 'Liberia', + nameForRegion: 'Liberia', + }, + { + regionCode: 'LS', + countryCode: 266, + flagSymbol: '🇱🇸', + nameForLocale: 'Lesotho', + nameForRegion: 'Lesotho', + }, + { + regionCode: 'LT', + countryCode: 370, + flagSymbol: '🇱🇹', + nameForLocale: 'Lithuania', + nameForRegion: 'Lietuva', + }, + { + regionCode: 'LU', + countryCode: 352, + flagSymbol: '🇱🇺', + nameForLocale: 'Luxembourg', + nameForRegion: 'Luxembourg', + }, + { + regionCode: 'LV', + countryCode: 371, + flagSymbol: '🇱🇻', + nameForLocale: 'Latvia', + nameForRegion: 'Latvija', + }, + { + regionCode: 'LY', + countryCode: 218, + flagSymbol: '🇱🇾', + nameForLocale: 'Libya', + nameForRegion: 'Libya', + }, + { + regionCode: 'MA', + countryCode: 212, + flagSymbol: '🇲🇦', + nameForLocale: 'Morocco', + nameForRegion: 'Morocco', + }, + { + regionCode: 'MC', + countryCode: 377, + flagSymbol: '🇲🇨', + nameForLocale: 'Monaco', + nameForRegion: 'Monaco', + }, + { + regionCode: 'MD', + countryCode: 373, + flagSymbol: '🇲🇩', + nameForLocale: 'Moldova', + nameForRegion: 'Moldova', + }, + { + regionCode: 'ME', + countryCode: 382, + flagSymbol: '🇲🇪', + nameForLocale: 'Montenegro', + nameForRegion: 'Montenegro', + }, + { + regionCode: 'MF', + countryCode: 590, + flagSymbol: '🇲🇫', + nameForLocale: 'St. Martin', + nameForRegion: 'St Martin', + }, + { + regionCode: 'MG', + countryCode: 261, + flagSymbol: '🇲🇬', + nameForLocale: 'Madagascar', + nameForRegion: 'Madagascar', + }, + { + regionCode: 'MH', + countryCode: 692, + flagSymbol: '🇲🇭', + nameForLocale: 'Marshall Islands', + nameForRegion: 'Marshall Islands', + }, + { + regionCode: 'MK', + countryCode: 389, + flagSymbol: '🇲🇰', + nameForLocale: 'North Macedonia', + nameForRegion: 'North Macedonia', + }, + { + regionCode: 'ML', + countryCode: 223, + flagSymbol: '🇲🇱', + nameForLocale: 'Mali', + nameForRegion: 'മാലി', + }, + { + regionCode: 'MM', + countryCode: 95, + flagSymbol: '🇲🇲', + nameForLocale: 'Myanmar (Burma)', + nameForRegion: 'Myanmar (Burma)', + }, + { + regionCode: 'MN', + countryCode: 976, + flagSymbol: '🇲🇳', + nameForLocale: 'Mongolia', + nameForRegion: 'Mongolia', + }, + { + regionCode: 'MO', + countryCode: 853, + flagSymbol: '🇲🇴', + nameForLocale: 'Macao', + nameForRegion: 'Macao', + }, + { + regionCode: 'MP', + countryCode: 1, + flagSymbol: '🇲🇵', + nameForLocale: 'Northern Mariana Islands', + nameForRegion: 'Northern Mariana Islands', + }, + { + regionCode: 'MQ', + countryCode: 596, + flagSymbol: '🇲🇶', + nameForLocale: 'Martinique', + nameForRegion: 'Martinique', + }, + { + regionCode: 'MR', + countryCode: 222, + flagSymbol: '🇲🇷', + nameForLocale: 'Mauritania', + nameForRegion: 'मॉरिटानिया', + }, + { + regionCode: 'MS', + countryCode: 1, + flagSymbol: '🇲🇸', + nameForLocale: 'Montserrat', + nameForRegion: 'Montserrat', + }, + { + regionCode: 'MT', + countryCode: 356, + flagSymbol: '🇲🇹', + nameForLocale: 'Malta', + nameForRegion: 'Malta', + }, + { + regionCode: 'MU', + countryCode: 230, + flagSymbol: '🇲🇺', + nameForLocale: 'Mauritius', + nameForRegion: 'Mauritius', + }, + { + regionCode: 'MV', + countryCode: 960, + flagSymbol: '🇲🇻', + nameForLocale: 'Maldives', + nameForRegion: 'Maldives', + }, + { + regionCode: 'MW', + countryCode: 265, + flagSymbol: '🇲🇼', + nameForLocale: 'Malawi', + nameForRegion: 'Malawi', + }, + { + regionCode: 'MX', + countryCode: 52, + flagSymbol: '🇲🇽', + nameForLocale: 'Mexico', + nameForRegion: 'Mexico', + }, + { + regionCode: 'MY', + countryCode: 60, + flagSymbol: '🇲🇾', + nameForLocale: 'Malaysia', + nameForRegion: 'Malaysia', + }, + { + regionCode: 'MZ', + countryCode: 258, + flagSymbol: '🇲🇿', + nameForLocale: 'Mozambique', + nameForRegion: 'Mozambique', + }, + { + regionCode: 'NA', + countryCode: 264, + flagSymbol: '🇳🇦', + nameForLocale: 'Namibia', + nameForRegion: 'Namibia', + }, + { + regionCode: 'NC', + countryCode: 687, + flagSymbol: '🇳🇨', + nameForLocale: 'New Caledonia', + nameForRegion: 'New Caledonia', + }, + { + regionCode: 'NE', + countryCode: 227, + flagSymbol: '🇳🇪', + nameForLocale: 'Niger', + nameForRegion: 'Niger', + }, + { + regionCode: 'NF', + countryCode: 672, + flagSymbol: '🇳🇫', + nameForLocale: 'Norfolk Island', + nameForRegion: 'Norfolk Island', + }, + { + regionCode: 'NG', + countryCode: 234, + flagSymbol: '🇳🇬', + nameForLocale: 'Nigeria', + nameForRegion: 'Nigeria', + }, + { + regionCode: 'NI', + countryCode: 505, + flagSymbol: '🇳🇮', + nameForLocale: 'Nicaragua', + nameForRegion: 'Nicaragua', + }, + { + regionCode: 'NL', + countryCode: 31, + flagSymbol: '🇳🇱', + nameForLocale: 'Netherlands', + nameForRegion: 'Nederland', + }, + { + regionCode: 'NO', + countryCode: 47, + flagSymbol: '🇳🇴', + nameForLocale: 'Norway', + nameForRegion: 'Norge', + }, + { + regionCode: 'NP', + countryCode: 977, + flagSymbol: '🇳🇵', + nameForLocale: 'Nepal', + nameForRegion: 'Nepal', + }, + { + regionCode: 'NR', + countryCode: 674, + flagSymbol: '🇳🇷', + nameForLocale: 'Nauru', + nameForRegion: 'Nauru', + }, + { + regionCode: 'NU', + countryCode: 683, + flagSymbol: '🇳🇺', + nameForLocale: 'Niue', + nameForRegion: 'Niue', + }, + { + regionCode: 'NZ', + countryCode: 64, + flagSymbol: '🇳🇿', + nameForLocale: 'New Zealand', + nameForRegion: 'New Zealand', + }, + { + regionCode: 'OM', + countryCode: 968, + flagSymbol: '🇴🇲', + nameForLocale: 'Oman', + nameForRegion: 'Oman', + }, + { + regionCode: 'PA', + countryCode: 507, + flagSymbol: '🇵🇦', + nameForLocale: 'Panama', + nameForRegion: 'Panama', + }, + { + regionCode: 'PE', + countryCode: 51, + flagSymbol: '🇵🇪', + nameForLocale: 'Peru', + nameForRegion: 'Peru', + }, + { + regionCode: 'PF', + countryCode: 689, + flagSymbol: '🇵🇫', + nameForLocale: 'French Polynesia', + nameForRegion: 'French Polynesia', + }, + { + regionCode: 'PG', + countryCode: 675, + flagSymbol: '🇵🇬', + nameForLocale: 'Papua New Guinea', + nameForRegion: 'Papua New Guinea', + }, + { + regionCode: 'PH', + countryCode: 63, + flagSymbol: '🇵🇭', + nameForLocale: 'Philippines', + nameForRegion: 'Philippines', + }, + { + regionCode: 'PK', + countryCode: 92, + flagSymbol: '🇵🇰', + nameForLocale: 'Pakistan', + nameForRegion: 'Pakistan', + }, + { + regionCode: 'PL', + countryCode: 48, + flagSymbol: '🇵🇱', + nameForLocale: 'Poland', + nameForRegion: 'Polska', + }, + { + regionCode: 'PM', + countryCode: 508, + flagSymbol: '🇵🇲', + nameForLocale: 'St. Pierre & Miquelon', + nameForRegion: 'St Pierre & Miquelon', + }, + { + regionCode: 'PR', + countryCode: 1, + flagSymbol: '🇵🇷', + nameForLocale: 'Puerto Rico', + nameForRegion: 'Puerto Rico', + }, + { + regionCode: 'PS', + countryCode: 970, + flagSymbol: '🇵🇸', + nameForLocale: 'Palestine', + nameForRegion: 'Palestine', + }, + { + regionCode: 'PT', + countryCode: 351, + flagSymbol: '🇵🇹', + nameForLocale: 'Portugal', + nameForRegion: 'Portugal', + }, + { + regionCode: 'PW', + countryCode: 680, + flagSymbol: '🇵🇼', + nameForLocale: 'Palau', + nameForRegion: 'Palau', + }, + { + regionCode: 'PY', + countryCode: 595, + flagSymbol: '🇵🇾', + nameForLocale: 'Paraguay', + nameForRegion: 'Paraguay', + }, + { + regionCode: 'QA', + countryCode: 974, + flagSymbol: '🇶🇦', + nameForLocale: 'Qatar', + nameForRegion: 'Qatar', + }, + { + regionCode: 'RE', + countryCode: 262, + flagSymbol: '🇷🇪', + nameForLocale: 'Réunion', + nameForRegion: 'Réunion', + }, + { + regionCode: 'RO', + countryCode: 40, + flagSymbol: '🇷🇴', + nameForLocale: 'Romania', + nameForRegion: 'România', + }, + { + regionCode: 'RS', + countryCode: 381, + flagSymbol: '🇷🇸', + nameForLocale: 'Serbia', + nameForRegion: 'Serbia', + }, + { + regionCode: 'RU', + countryCode: 7, + flagSymbol: '🇷🇺', + nameForLocale: 'Russia', + nameForRegion: 'Россия', + }, + { + regionCode: 'RW', + countryCode: 250, + flagSymbol: '🇷🇼', + nameForLocale: 'Rwanda', + nameForRegion: 'Rwanda', + }, + { + regionCode: 'SA', + countryCode: 966, + flagSymbol: '🇸🇦', + nameForLocale: 'Saudi Arabia', + nameForRegion: 'Saudi Arabia', + }, + { + regionCode: 'SB', + countryCode: 677, + flagSymbol: '🇸🇧', + nameForLocale: 'Solomon Islands', + nameForRegion: 'Solomon Islands', + }, + { + regionCode: 'SC', + countryCode: 248, + flagSymbol: '🇸🇨', + nameForLocale: 'Seychelles', + nameForRegion: 'Seychelles', + }, + { + regionCode: 'SD', + countryCode: 249, + flagSymbol: '🇸🇩', + nameForLocale: 'Sudan', + nameForRegion: 'Sudan', + }, + { + regionCode: 'SE', + countryCode: 46, + flagSymbol: '🇸🇪', + nameForLocale: 'Sweden', + nameForRegion: 'Sweden', + }, + { + regionCode: 'SG', + countryCode: 65, + flagSymbol: '🇸🇬', + nameForLocale: 'Singapore', + nameForRegion: 'Singapore', + }, + { + regionCode: 'SH', + countryCode: 290, + flagSymbol: '🇸🇭', + nameForLocale: 'St. Helena', + nameForRegion: 'Sveta Jelena', + }, + { + regionCode: 'SI', + countryCode: 386, + flagSymbol: '🇸🇮', + nameForLocale: 'Slovenia', + nameForRegion: 'Slovenia', + }, + { + regionCode: 'SJ', + countryCode: 47, + flagSymbol: '🇸🇯', + nameForLocale: 'Svalbard & Jan Mayen', + nameForRegion: 'Svalbard & Jan Mayen', + }, + { + regionCode: 'SK', + countryCode: 421, + flagSymbol: '🇸🇰', + nameForLocale: 'Slovakia', + nameForRegion: 'Slovensko', + }, + { + regionCode: 'SL', + countryCode: 232, + flagSymbol: '🇸🇱', + nameForLocale: 'Sierra Leone', + nameForRegion: 'Sierra Leone', + }, + { + regionCode: 'SM', + countryCode: 378, + flagSymbol: '🇸🇲', + nameForLocale: 'San Marino', + nameForRegion: 'San Marino', + }, + { + regionCode: 'SN', + countryCode: 221, + flagSymbol: '🇸🇳', + nameForLocale: 'Senegal', + nameForRegion: 'Senegal', + }, + { + regionCode: 'SO', + countryCode: 252, + flagSymbol: '🇸🇴', + nameForLocale: 'Somalia', + nameForRegion: 'Somalia', + }, + { + regionCode: 'SR', + countryCode: 597, + flagSymbol: '🇸🇷', + nameForLocale: 'Suriname', + nameForRegion: 'Суринам', + }, + { + regionCode: 'SS', + countryCode: 211, + flagSymbol: '🇸🇸', + nameForLocale: 'South Sudan', + nameForRegion: 'South Sudan', + }, + { + regionCode: 'ST', + countryCode: 239, + flagSymbol: '🇸🇹', + nameForLocale: 'São Tomé & Príncipe', + nameForRegion: 'São Tomé & Príncipe', + }, + { + regionCode: 'SV', + countryCode: 503, + flagSymbol: '🇸🇻', + nameForLocale: 'El Salvador', + nameForRegion: 'El Salvador', + }, + { + regionCode: 'SX', + countryCode: 1, + flagSymbol: '🇸🇽', + nameForLocale: 'Sint Maarten', + nameForRegion: 'Sint Maarten', + }, + { + regionCode: 'SY', + countryCode: 963, + flagSymbol: '🇸🇾', + nameForLocale: 'Syria', + nameForRegion: 'Syria', + }, + { + regionCode: 'SZ', + countryCode: 268, + flagSymbol: '🇸🇿', + nameForLocale: 'Eswatini', + nameForRegion: 'Eswatini', + }, + { + regionCode: 'TA', + countryCode: 290, + flagSymbol: '🇹🇦', + nameForLocale: 'Tristan da Cunha', + nameForRegion: 'டிரிஸ்டன் டா குன்ஹா', + }, + { + regionCode: 'TC', + countryCode: 1, + flagSymbol: '🇹🇨', + nameForLocale: 'Turks & Caicos Islands', + nameForRegion: 'Turks & Caicos Islands', + }, + { + regionCode: 'TD', + countryCode: 235, + flagSymbol: '🇹🇩', + nameForLocale: 'Chad', + nameForRegion: 'Chad', + }, + { + regionCode: 'TG', + countryCode: 228, + flagSymbol: '🇹🇬', + nameForLocale: 'Togo', + nameForRegion: 'Togo', + }, + { + regionCode: 'TH', + countryCode: 66, + flagSymbol: '🇹🇭', + nameForLocale: 'Thailand', + nameForRegion: 'ไทย', + }, + { + regionCode: 'TJ', + countryCode: 992, + flagSymbol: '🇹🇯', + nameForLocale: 'Tajikistan', + nameForRegion: 'Tajikistan', + }, + { + regionCode: 'TK', + countryCode: 690, + flagSymbol: '🇹🇰', + nameForLocale: 'Tokelau', + nameForRegion: 'Tokelau', + }, + { + regionCode: 'TL', + countryCode: 670, + flagSymbol: '🇹🇱', + nameForLocale: 'Timor-Leste', + nameForRegion: 'Timor-Leste', + }, + { + regionCode: 'TM', + countryCode: 993, + flagSymbol: '🇹🇲', + nameForLocale: 'Turkmenistan', + nameForRegion: 'Turkmenistan', + }, + { + regionCode: 'TN', + countryCode: 216, + flagSymbol: '🇹🇳', + nameForLocale: 'Tunisia', + nameForRegion: 'Tunisia', + }, + { + regionCode: 'TO', + countryCode: 676, + flagSymbol: '🇹🇴', + nameForLocale: 'Tonga', + nameForRegion: 'Tonga', + }, + { + regionCode: 'TR', + countryCode: 90, + flagSymbol: '🇹🇷', + nameForLocale: 'Turkey', + nameForRegion: 'Türkiye', + }, + { + regionCode: 'TT', + countryCode: 1, + flagSymbol: '🇹🇹', + nameForLocale: 'Trinidad & Tobago', + nameForRegion: 'Trinidad & Tobago', + }, + { + regionCode: 'TV', + countryCode: 688, + flagSymbol: '🇹🇻', + nameForLocale: 'Tuvalu', + nameForRegion: 'Tuvalu', + }, + { + regionCode: 'TW', + countryCode: 886, + flagSymbol: '🇹🇼', + nameForLocale: 'Taiwan', + nameForRegion: 'Taiwan', + }, + { + regionCode: 'TZ', + countryCode: 255, + flagSymbol: '🇹🇿', + nameForLocale: 'Tanzania', + nameForRegion: 'Tanzania', + }, + { + regionCode: 'UA', + countryCode: 380, + flagSymbol: '🇺🇦', + nameForLocale: 'Ukraine', + nameForRegion: 'Ukraine', + }, + { + regionCode: 'UG', + countryCode: 256, + flagSymbol: '🇺🇬', + nameForLocale: 'Uganda', + nameForRegion: 'Uganda', + }, + { + regionCode: 'US', + countryCode: 1, + flagSymbol: '🇺🇸', + nameForLocale: 'United States', + nameForRegion: 'United States', + }, + { + regionCode: 'UY', + countryCode: 598, + flagSymbol: '🇺🇾', + nameForLocale: 'Uruguay', + nameForRegion: 'Uruguay', + }, + { + regionCode: 'UZ', + countryCode: 998, + flagSymbol: '🇺🇿', + nameForLocale: 'Uzbekistan', + nameForRegion: 'Uzbekistan', + }, + { + regionCode: 'VA', + countryCode: 39, + flagSymbol: '🇻🇦', + nameForLocale: 'Vatican City', + nameForRegion: 'Vatican City', + }, + { + regionCode: 'VC', + countryCode: 1, + flagSymbol: '🇻🇨', + nameForLocale: 'St. Vincent & Grenadines', + nameForRegion: 'St Vincent & the Grenadines', + }, + { + regionCode: 'VE', + countryCode: 58, + flagSymbol: '🇻🇪', + nameForLocale: 'Venezuela', + nameForRegion: 'Venezuela', + }, + { + regionCode: 'VG', + countryCode: 1, + flagSymbol: '🇻🇬', + nameForLocale: 'British Virgin Islands', + nameForRegion: 'British Virgin Islands', + }, + { + regionCode: 'VI', + countryCode: 1, + flagSymbol: '🇻🇮', + nameForLocale: 'U.S. Virgin Islands', + nameForRegion: 'Quần đảo Virgin thuộc Hoa Kỳ', + }, + { + regionCode: 'VN', + countryCode: 84, + flagSymbol: '🇻🇳', + nameForLocale: 'Vietnam', + nameForRegion: 'Vietnam', + }, + { + regionCode: 'VU', + countryCode: 678, + flagSymbol: '🇻🇺', + nameForLocale: 'Vanuatu', + nameForRegion: 'Vanuatu', + }, + { + regionCode: 'WF', + countryCode: 681, + flagSymbol: '🇼🇫', + nameForLocale: 'Wallis & Futuna', + nameForRegion: 'Wallis & Futuna', + }, + { + regionCode: 'WS', + countryCode: 685, + flagSymbol: '🇼🇸', + nameForLocale: 'Samoa', + nameForRegion: 'Samoa', + }, + { + regionCode: 'XK', + countryCode: 383, + flagSymbol: '🇽🇰', + nameForLocale: 'Kosovo', + nameForRegion: 'Kosovo', + }, + { + regionCode: 'YE', + countryCode: 967, + flagSymbol: '🇾🇪', + nameForLocale: 'Yemen', + nameForRegion: 'Yemen', + }, + { + regionCode: 'YT', + countryCode: 262, + flagSymbol: '🇾🇹', + nameForLocale: 'Mayotte', + nameForRegion: 'Mayotte', + }, + { + regionCode: 'ZA', + countryCode: 27, + flagSymbol: '🇿🇦', + nameForLocale: 'South Africa', + nameForRegion: 'South Africa', + }, + { + regionCode: 'ZM', + countryCode: 260, + flagSymbol: '🇿🇲', + nameForLocale: 'Zambia', + nameForRegion: 'Zambia', + }, + { + regionCode: 'ZW', + countryCode: 263, + flagSymbol: '🇿🇼', + nameForLocale: 'Zimbabwe', + nameForRegion: 'Zimbabwe', + }, +]; From 8314b4b3ab8affcdc0c392f0a568bf6f43fef779 Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Tue, 15 Mar 2022 23:38:52 +0100 Subject: [PATCH 11/19] chore: advanced version of h-output demo helper --- docs/docs/systems/form/assets/h-output.js | 146 +++++++++++++++------- 1 file changed, 101 insertions(+), 45 deletions(-) diff --git a/docs/docs/systems/form/assets/h-output.js b/docs/docs/systems/form/assets/h-output.js index f172c94cb..7c8ccc2af 100644 --- a/docs/docs/systems/form/assets/h-output.js +++ b/docs/docs/systems/form/assets/h-output.js @@ -3,39 +3,67 @@ import { LionField } from '@lion/form-core'; import { LionFieldset } from '@lion/fieldset'; export class HelperOutput extends LitElement { - static get properties() { - return { - field: Object, - show: Array, - }; - } + static properties = { + field: Object, + show: Array, + title: String, + readyPromise: Object, + }; - static get styles() { - return [ - css` - :host { - display: block; - margin-top: 16px; - } + static styles = [ + css` + :host { + display: block; + margin-top: 8px; + } - table, - th, - td { - border: 1px solid #ccc; - padding: 4px; - font-size: 12px; - } + code { + font-size: 8px; + background-color: #eee; + } - table { - border-collapse: collapse; - } + caption { + position: absolute; + top: 0; + width: 1px; + height: 1px; + overflow: hidden; + clip-path: inset(100%); + clip: rect(1px, 1px, 1px, 1px); + white-space: nowrap; + border: 0; + margin: 0; + padding: 0; + } - caption { - text-align: left; - } - `, - ]; - } + table, + th, + td { + border-bottom: 1px solid rgb(204, 204, 204); + border-image: initial; + padding: 4px; + font-size: 12px; + border-left: none; + border-right: none; + text-align: left; + } + + td { + max-width: 200px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + table { + border-collapse: collapse; + } + + caption { + text-align: left; + } + `, + ]; firstUpdated(changedProperties) { super.firstUpdated(changedProperties); @@ -47,15 +75,25 @@ export class HelperOutput extends LitElement { } } this.__rerender = this.__rerender.bind(this); - this.field.addEventListener('model-value-changed', this.__rerender); - this.field.addEventListener('mousemove', this.__rerender); - this.field.addEventListener('blur', this.__rerender); - this.field.addEventListener('focusin', this.__rerender); - this.field.addEventListener('focusout', this.__rerender); + + const storyRoot = this.field.closest('[mdjs-story-name]'); + + storyRoot.addEventListener('model-value-changed', this.__rerender); + storyRoot.addEventListener('mousemove', this.__rerender); + // this.field.addEventListener('blur', this.__rerender); + storyRoot.addEventListener('focusin', this.__rerender); + storyRoot.addEventListener('focusout', this.__rerender); + storyRoot.addEventListener('change', this.__rerender); if (this.field._inputNode.form) { this.field._inputNode.form.addEventListener('submit', this.__rerender); } + + if (this.readyPromise) { + this.readyPromise.then(() => { + this.__rerender(); + }); + } } __rerender() { @@ -67,29 +105,47 @@ export class HelperOutput extends LitElement { } // eslint-disable-next-line class-methods-use-this - __renderProp(p) { - if (typeof p === 'boolean') { - return p === true ? '✓' : ''; + __renderProp(prop) { + const field = this.field || {}; + let resultText = ''; + + if (typeof prop === 'string') { + const p = field[prop]; + if (typeof p === 'boolean') { + return p === true ? '✓' : ''; + } + if (typeof p === 'undefined') { + return html`undefined`; + } + if (typeof p === 'object' && p !== null) { + return JSON.stringify(p); + } + resultText = p; + } else { + resultText = prop.processor(field); } - if (typeof p === 'undefined') { - return '?'; - } - return p; + + return html`${resultText}`; + } + + constructor() { + super(); + this.title = 'States'; } render() { - const field = this.field || {}; + const computePropName = prop => (typeof prop === 'string' ? prop : prop.name); return html` - ${this.show.map(prop => html``)} + ${this.show.map(prop => html``)} - ${this.show.map(prop => html``)} + ${this.show.map(prop => html``)}
- Interaction States + ${this.title}
${prop}${computePropName(prop)}
${this.__renderProp(field[prop])}${this.__renderProp(prop)}
`; From a882c94f11c56cd17a6f95aabc717b07c428f662 Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Tue, 15 Mar 2022 23:39:25 +0100 Subject: [PATCH 12/19] feat(input-tel): new component LionInputTel --- .changeset/rare-panthers-crash.md | 5 + docs/components/inputs/input-tel/features.md | 254 + docs/components/inputs/input-tel/index.md | 3 + docs/components/inputs/input-tel/overview.md | 59 + .../input-tel/src/h-region-code-table.js | 107 + packages/input-tel/README.md | 3 + packages/input-tel/define.js | 1 + packages/input-tel/docs/features.md | 3 + packages/input-tel/docs/overview.md | 3 + packages/input-tel/index.js | 3 + .../input-tel/lib/awesome-phonenumber-esm.js | 14999 ++++++++++++++++ packages/input-tel/lion-input-tel.js | 3 + packages/input-tel/package.json | 63 + packages/input-tel/src/LionInputTel.js | 317 + packages/input-tel/src/PhoneUtilManager.js | 38 + packages/input-tel/src/formatters.js | 57 + packages/input-tel/src/parsers.js | 33 + packages/input-tel/src/preprocessors.js | 51 + packages/input-tel/src/validators.js | 70 + packages/input-tel/test-helpers/index.js | 1 + .../test-helpers/mockPhoneUtilManager.js | 25 + .../test-suites/LionInputTel.suite.js | 384 + packages/input-tel/test-suites/index.js | 1 + packages/input-tel/test/LionInputTel.test.js | 3 + packages/input-tel/test/formatters.test.js | 28 + packages/input-tel/test/parsers.test.js | 16 + packages/input-tel/test/preprocessors.test.js | 32 + packages/input-tel/test/validators.test.js | 94 + packages/input-tel/translations/bg-BG.js | 5 + packages/input-tel/translations/bg.js | 4 + packages/input-tel/translations/cs-CZ.js | 5 + packages/input-tel/translations/cs.js | 4 + packages/input-tel/translations/de-DE.js | 5 + packages/input-tel/translations/de.js | 4 + packages/input-tel/translations/en-AU.js | 5 + packages/input-tel/translations/en-GB.js | 5 + packages/input-tel/translations/en-US.js | 5 + packages/input-tel/translations/en.js | 4 + packages/input-tel/translations/es-ES.js | 5 + packages/input-tel/translations/es.js | 4 + packages/input-tel/translations/fr-BE.js | 5 + packages/input-tel/translations/fr-FR.js | 5 + packages/input-tel/translations/fr.js | 4 + packages/input-tel/translations/hu-HU.js | 5 + packages/input-tel/translations/hu.js | 4 + packages/input-tel/translations/it-IT.js | 5 + packages/input-tel/translations/it.js | 4 + packages/input-tel/translations/nl-BE.js | 5 + packages/input-tel/translations/nl-NL.js | 5 + packages/input-tel/translations/nl.js | 4 + packages/input-tel/translations/pl-PL.js | 5 + packages/input-tel/translations/pl.js | 4 + packages/input-tel/translations/ro-RO.js | 5 + packages/input-tel/translations/ro.js | 4 + packages/input-tel/translations/ru-RU.js | 5 + packages/input-tel/translations/ru.js | 4 + packages/input-tel/translations/sk-SK.js | 5 + packages/input-tel/translations/sk.js | 4 + packages/input-tel/translations/uk-UA.js | 5 + packages/input-tel/translations/uk.js | 4 + packages/input-tel/translations/zh.js | 4 + packages/input-tel/types/index.d.ts | 290 + 62 files changed, 17096 insertions(+) create mode 100644 .changeset/rare-panthers-crash.md create mode 100644 docs/components/inputs/input-tel/features.md create mode 100644 docs/components/inputs/input-tel/index.md create mode 100644 docs/components/inputs/input-tel/overview.md create mode 100644 docs/components/inputs/input-tel/src/h-region-code-table.js create mode 100644 packages/input-tel/README.md create mode 100644 packages/input-tel/define.js create mode 100644 packages/input-tel/docs/features.md create mode 100644 packages/input-tel/docs/overview.md create mode 100644 packages/input-tel/index.js create mode 100644 packages/input-tel/lib/awesome-phonenumber-esm.js create mode 100644 packages/input-tel/lion-input-tel.js create mode 100644 packages/input-tel/package.json create mode 100644 packages/input-tel/src/LionInputTel.js create mode 100644 packages/input-tel/src/PhoneUtilManager.js create mode 100644 packages/input-tel/src/formatters.js create mode 100644 packages/input-tel/src/parsers.js create mode 100644 packages/input-tel/src/preprocessors.js create mode 100644 packages/input-tel/src/validators.js create mode 100644 packages/input-tel/test-helpers/index.js create mode 100644 packages/input-tel/test-helpers/mockPhoneUtilManager.js create mode 100644 packages/input-tel/test-suites/LionInputTel.suite.js create mode 100644 packages/input-tel/test-suites/index.js create mode 100644 packages/input-tel/test/LionInputTel.test.js create mode 100644 packages/input-tel/test/formatters.test.js create mode 100644 packages/input-tel/test/parsers.test.js create mode 100644 packages/input-tel/test/preprocessors.test.js create mode 100644 packages/input-tel/test/validators.test.js create mode 100644 packages/input-tel/translations/bg-BG.js create mode 100644 packages/input-tel/translations/bg.js create mode 100644 packages/input-tel/translations/cs-CZ.js create mode 100644 packages/input-tel/translations/cs.js create mode 100644 packages/input-tel/translations/de-DE.js create mode 100644 packages/input-tel/translations/de.js create mode 100644 packages/input-tel/translations/en-AU.js create mode 100644 packages/input-tel/translations/en-GB.js create mode 100644 packages/input-tel/translations/en-US.js create mode 100644 packages/input-tel/translations/en.js create mode 100644 packages/input-tel/translations/es-ES.js create mode 100644 packages/input-tel/translations/es.js create mode 100644 packages/input-tel/translations/fr-BE.js create mode 100644 packages/input-tel/translations/fr-FR.js create mode 100644 packages/input-tel/translations/fr.js create mode 100644 packages/input-tel/translations/hu-HU.js create mode 100644 packages/input-tel/translations/hu.js create mode 100644 packages/input-tel/translations/it-IT.js create mode 100644 packages/input-tel/translations/it.js create mode 100644 packages/input-tel/translations/nl-BE.js create mode 100644 packages/input-tel/translations/nl-NL.js create mode 100644 packages/input-tel/translations/nl.js create mode 100644 packages/input-tel/translations/pl-PL.js create mode 100644 packages/input-tel/translations/pl.js create mode 100644 packages/input-tel/translations/ro-RO.js create mode 100644 packages/input-tel/translations/ro.js create mode 100644 packages/input-tel/translations/ru-RU.js create mode 100644 packages/input-tel/translations/ru.js create mode 100644 packages/input-tel/translations/sk-SK.js create mode 100644 packages/input-tel/translations/sk.js create mode 100644 packages/input-tel/translations/uk-UA.js create mode 100644 packages/input-tel/translations/uk.js create mode 100644 packages/input-tel/translations/zh.js create mode 100644 packages/input-tel/types/index.d.ts diff --git a/.changeset/rare-panthers-crash.md b/.changeset/rare-panthers-crash.md new file mode 100644 index 000000000..732c593b1 --- /dev/null +++ b/.changeset/rare-panthers-crash.md @@ -0,0 +1,5 @@ +--- +'@lion/input-tel': minor +--- + +New component "LionInputTel" diff --git a/docs/components/inputs/input-tel/features.md b/docs/components/inputs/input-tel/features.md new file mode 100644 index 000000000..483e36624 --- /dev/null +++ b/docs/components/inputs/input-tel/features.md @@ -0,0 +1,254 @@ +# Inputs >> Input Tel >> Features ||20 + +```js script +import { html } from '@mdjs/mdjs-preview'; +import { ref, createRef } from '@lion/core'; +import { Unparseable } from '@lion/form-core'; +import { localize } from '@lion/localize'; +import { loadDefaultFeedbackMessages } from '@lion/validate-messages'; +import { PhoneUtilManager } from '@lion/input-tel'; +import '@lion/input-tel/define'; +import './src/h-region-code-table.js'; +import '../../../docs/systems/form/assets/h-output.js'; +``` + +## Regions: some context + +Say we have the following telephone number from Madrid, Spain: `+34919930432`. + +It contains a [country code](https://en.wikipedia.org/wiki/Country_code) (34), an [area code](https://en.wikipedia.org/wiki/Telephone_numbering_plan#Area_code) (91) and a [dial code](https://en.wikipedia.org/wiki/Mobile_dial_code) (+34 91). +Input Tel interprets phone numbers based on their [region code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2): a two character long region representation('ES' in the telephone number above). + +The table below lists all possible regions worldwide. When [allowed regions](#allowed-regions) are not configured, +all of them will be supported as values of Input Tel. + +```js story +export const regionCodesTable = () => html``; +``` + +### Active region + +The active region (accessible via readonly accessor `.activeRegion`) determines how validation and formatting +should be applied. It is dependent on the following factors: + +- [allowed regions](#allowed-regions): a list that determines what is allowed to become .activeRegion. If + [.allowedRegions has only one entry](#restrict-to-one-region), .activeRegion will always be this value. +- the modelValue or viewValue: once it contains sufficient info to derive its region code (and + the derived code is inside [allowed regions](#allowed-regions) if configured) +- active locale (and the derived locale is inside [allowed regions](#allowed-regions) if configured) + +What follows from the list above is that .activeRegion can change dynamically, after a value +change in the text box by the user (or when locales or allowed regions would be changed by the +Application Developer). + +### How active region is computed + +The following heuristic will be applied: + +1. check for **allowed regions**: if one region defined in .allowedRegions, use it. +2. check for **user input**: try to derive active region from user input +3. check for **locale**: try to get the region from locale (`html[lang]` attribute) + +```js preview-story +export const heuristic = () => { + const initialAllowedRegions = ['CN', 'ES']; + const [inputTelRef, outputRef, selectRef] = [createRef(), createRef(), createRef()]; + + const setDerivedActiveRegionScenario = ( + scenarioToSet, + inputTel = inputTelRef.value, + output = outputRef.value, + ) => { + if (scenarioToSet === 'only-allowed-region') { + // activeRegion will be the top allowed region, which is 'NL' + inputTel.modelValue = undefined; + inputTel.allowedRegions = ['NL']; // activeRegion will always be the only option + output.innerText = '.activeRegion (NL) is only allowed region'; + } else if (scenarioToSet === 'user-input') { + // activeRegion will be based on phone number => 'BE' + inputTel.allowedRegions = ['NL', 'BE', 'DE']; + inputTel.modelValue = '+3261234567'; // BE number + output.innerText = '.activeRegion (BE) is derived (since within allowedRegions)'; + } else if (scenarioToSet === 'locale') { + localize.locale = 'en-GB'; + // activeRegion will be `html[lang]` + inputTel.modelValue = undefined; + inputTel.allowedRegions = undefined; + output.innerText = `.activeRegion (${inputTel._langIso}) set to locale when inside allowed or all regions`; + } else { + output.innerText = ''; + } + }; + return html` + + + + + `; +}; +``` + +## Allowed regions + +`.allowedRegions` is an array of one or more region codes. +Once it is configured, validation and formatting will be restricted to those +values that are present in this list. + +> Note that for [InputTelDropdown](../input-tel-dropdown/index.md), only allowed regions will +> be shown in the dropdown list. + +```js preview-story +export const allowedRegions = () => html` + + +`; +``` + +### Restrict to one region + +When one allowed region is configured, validation and formatting will be restricted to just that +region (that means that changes of the region via viewValue won't have effect). + +```js preview-story +export const oneAllowedRegion = () => html` + + +`; +``` + +## Format strategy + +Determines what the formatter output should look like. +Formatting strategies as provided by awesome-phonenumber / google-libphonenumber. + +Possible values: + +| strategy | output | +| :------------ | ---------------------: | +| e164 | `+46707123456` | +| international | `+46 70 712 34 56` | +| national | `070-712 34 56` | +| significant | `707123456` | +| rfc3966 | `tel:+46-70-712-34-56` | + +Also see: + +- [awesome-phonenumber documentation](https://www.npmjs.com/package/awesome-phonenumber) + +```js preview-story +export const formatStrategy = () => { + const inputTel = createRef(); + return html` + + + + `; +}; +``` + +## Live format + +Type '6' in the example below to see how the phone number is formatted during typing. + +See [awesome-phonenumber documentation](https://www.npmjs.com/package/awesome-phonenumber) + +```js preview-story +export const liveFormat = () => html` + +`; +``` + +## Active phone number type + +The readonly acessor `.activePhoneNumberType` outputs the current phone number type, based on +the textbox value. + +Possible types: `fixed-line`, `fixed-line-or-mobile`, `mobile`, `pager`, `personal-number`, `premium-rate`, `shared-cost`, `toll-free`, `uan`, `voip`, `unknown` + +Also see: + +- [awesome-phonenumber documentation](https://www.npmjs.com/package/awesome-phonenumber) + +```js preview-story +export const activePhoneNumberType = () => html` + + +`; +``` diff --git a/docs/components/inputs/input-tel/index.md b/docs/components/inputs/input-tel/index.md new file mode 100644 index 000000000..f8548f9c5 --- /dev/null +++ b/docs/components/inputs/input-tel/index.md @@ -0,0 +1,3 @@ +# Inputs >> Input Tel ||20 + +-> go to Overview diff --git a/docs/components/inputs/input-tel/overview.md b/docs/components/inputs/input-tel/overview.md new file mode 100644 index 000000000..58b6f3a91 --- /dev/null +++ b/docs/components/inputs/input-tel/overview.md @@ -0,0 +1,59 @@ +# Inputs >> Input Tel >> Overview ||10 + +Input field for entering phone numbers, including validation, formatting and mobile keyboard support. + +```js script +import { html } from '@mdjs/mdjs-preview'; +import { ref, createRef } from '@lion/core'; +import { PhoneUtilManager } from '@lion/input-tel'; +import '@lion/input-tel/define'; +import '../../../docs/systems/form/assets/h-output.js'; +``` + +```js preview-story +export const main = () => { + return html` + + + `; +}; +``` + +## Features + +- Extends our [input](../input/overview.md) +- Shows a mobile telephone keypad on mobile (by having a native `` inside) +- Can be configured with a list of allowed region codes +- Will be preconfigured with region derived from locale +- Has the [e164 standard format](https://en.wikipedia.org/wiki/E.164) as modelValue +- Uses [awesome-phonenumber](https://www.npmjs.com/package/awesome-phonenumber) (a performant, concise version of [google-lib-phonenumber](https://www.npmjs.com/package/google-libphonenumber)): + - Formats phone numbers, based on region code + - Validates phone numbers, based on region code +- Lazy loads awesome-phonenumber, so that the first paint of this component will be brought to your screen as quick as possible + +## Installation + +```bash +npm i --save @lion/input-tel +``` + +```js +import { LionInputTel } from '@lion/input-tel'; +// or +import '@lion/input-tel/define'; +``` diff --git a/docs/components/inputs/input-tel/src/h-region-code-table.js b/docs/components/inputs/input-tel/src/h-region-code-table.js new file mode 100644 index 000000000..84c348a00 --- /dev/null +++ b/docs/components/inputs/input-tel/src/h-region-code-table.js @@ -0,0 +1,107 @@ +import { LitElement, css, html, repeat, ScopedStylesController } from '@lion/core'; +import { regionMetaList } from '../../select-rich/src/regionMetaList.js'; + +export class HRegionCodeTable extends LitElement { + static properties = { + regionMeta: Object, + }; + + constructor() { + super(); + /** @type {ScopedStylesController} */ + this.scopedStylesController = new ScopedStylesController(this); + } + + /** + * @param {CSSResult} scope + */ + static scopedStyles(scope) { + return css` + /* Custom input range styling comes here, be aware that this won't work for polyfilled browsers */ + .${scope} .sr-only { + position: absolute; + top: 0; + width: 1px; + height: 1px; + overflow: hidden; + clip-path: inset(100%); + clip: rect(1px, 1px, 1px, 1px); + white-space: nowrap; + border: 0; + margin: 0; + padding: 0; + } + + .${scope} table { + position: relative; + height: 300px; + } + + .${scope} th { + border-left: none; + border-right: none; + position: sticky; + top: -1px; + } + + .${scope} th .backdrop { + background-color: white; + opacity: 0.95; + filter: blur(4px); + position: absolute; + inset: -5px; + } + + .${scope} th .content { + position: relative; + } + + .${scope} td { + border-left: none; + border-right: none; + } + `; + } + + // Render to light dom, so global table styling will be applied + createRenderRoot() { + return this; + } + + render() { + const finalRegionMetaList = this.regionMetaList || regionMetaList; + return html` + + + + + + + + + + + ${repeat( + finalRegionMetaList, + regionMeta => regionMeta.regionCode, + ({ regionCode, countryCode, flagSymbol, nameForLocale }) => + html` + + + + `, + )} + +
+ Region codes +
+ country name + + region code + + country code +
${nameForLocale}${regionCode}${countryCode}
+ `; + } +} +customElements.define('h-region-code-table', HRegionCodeTable); diff --git a/packages/input-tel/README.md b/packages/input-tel/README.md new file mode 100644 index 000000000..15477ff9c --- /dev/null +++ b/packages/input-tel/README.md @@ -0,0 +1,3 @@ +# Lion Input Tel + +[=> See Source <=](../../docs/components/inputs/input-tel/overview.md) diff --git a/packages/input-tel/define.js b/packages/input-tel/define.js new file mode 100644 index 000000000..7cbb5eeed --- /dev/null +++ b/packages/input-tel/define.js @@ -0,0 +1 @@ +import './lion-input-tel.js'; diff --git a/packages/input-tel/docs/features.md b/packages/input-tel/docs/features.md new file mode 100644 index 000000000..67c340e21 --- /dev/null +++ b/packages/input-tel/docs/features.md @@ -0,0 +1,3 @@ +# Lion Input Tel Features + +[=> See Source <=](../../../docs/components/inputs/input-tel/features.md) diff --git a/packages/input-tel/docs/overview.md b/packages/input-tel/docs/overview.md new file mode 100644 index 000000000..beb882927 --- /dev/null +++ b/packages/input-tel/docs/overview.md @@ -0,0 +1,3 @@ +# Lion Input Tel Overview + +[=> See Source <=](../../../docs/components/inputs/input-tel/overview.md) diff --git a/packages/input-tel/index.js b/packages/input-tel/index.js new file mode 100644 index 000000000..ede29a74d --- /dev/null +++ b/packages/input-tel/index.js @@ -0,0 +1,3 @@ +export { LionInputTel } from './src/LionInputTel.js'; +export { PhoneUtilManager } from './src/PhoneUtilManager.js'; +export { liveFormatPhoneNumber } from './src/preprocessors.js'; diff --git a/packages/input-tel/lib/awesome-phonenumber-esm.js b/packages/input-tel/lib/awesome-phonenumber-esm.js new file mode 100644 index 000000000..7a4c80daa --- /dev/null +++ b/packages/input-tel/lib/awesome-phonenumber-esm.js @@ -0,0 +1,14999 @@ +// @ts-nocheck +/* eslint-disable */ + +var commonjsGlobal = + typeof globalThis !== 'undefined' + ? globalThis + : typeof window !== 'undefined' + ? window + : typeof global !== 'undefined' + ? global + : typeof self !== 'undefined' + ? self + : {}; + +function getDefaultExportFromCjs(x) { + return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; +} + +var awesomePhonenumber = { exports: {} }; + +var lib = { exports: {} }; + +(function (module) { + (function () { + /* + + Copyright The Closure Library Authors. + SPDX-License-Identifier: Apache-2.0 +*/ + var aa = this || self; + function h(a, b) { + function c() {} + c.prototype = b.prototype; + a.Ca = b.prototype; + a.prototype = new c(); + a.prototype.constructor = a; + a.Ia = function (d, e, f) { + for (var g = Array(arguments.length - 2), l = 2; l < arguments.length; l++) + g[l - 2] = arguments[l]; + return b.prototype[e].apply(d, g); + }; + } + function ba(a) { + var b = []; + let c = 0; + for (var d in a) b[c++] = a[d]; + return b; + } + function ca(a, b) { + this.h = a; + this.g = {}; + for (a = 0; a < b.length; a++) { + var c = b[a]; + this.g[c.g] = c; + } + } + function da(a) { + a = ba(a.g); + a.sort(function (b, c) { + return b.g - c.g; + }); + return a; + } + function ea(a, b) { + this.g = a; + this.l = !!b.fa; + this.h = b.i; + this.s = b.type; + this.o = !1; + switch (this.h) { + case fa: + case ha: + case ia: + case ja: + case ka: + case la: + case ma: + this.o = !0; + } + this.j = b.defaultValue; + } + var ma = 1, + la = 2, + fa = 3, + ha = 4, + ia = 6, + ja = 16, + ka = 18; + function k() { + this.h = {}; + this.j = this.m().g; + this.g = this.l = null; + } + k.prototype.has = function (a) { + return m(this, a.g); + }; + k.prototype.get = function (a, b) { + return n(this, a.g, b); + }; + k.prototype.set = function (a, b) { + p(this, a.g, b); + }; + k.prototype.add = function (a, b) { + na(this, a.g, b); + }; + function oa(a, b) { + for (var c = da(a.m()), d = 0; d < c.length; d++) { + var e = c[d], + f = e.g; + if (m(b, f)) { + a.g && delete a.g[e.g]; + var g = 11 == e.h || 10 == e.h; + if (e.l) { + e = r(b, f); + for (var l = 0; l < e.length; l++) na(a, f, g ? e[l].clone() : e[l]); + } else (e = t(b, f)), g ? ((g = t(a, f)) ? oa(g, e) : p(a, f, e.clone())) : p(a, f, e); + } + } + } + k.prototype.clone = function () { + var a = new this.constructor(); + a != this && ((a.h = {}), a.g && (a.g = {}), oa(a, this)); + return a; + }; + function m(a, b) { + return null != a.h[b]; + } + function t(a, b) { + var c = a.h[b]; + if (null == c) return null; + if (a.l) { + if (!(b in a.g)) { + var d = a.l, + e = a.j[b]; + if (null != c) + if (e.l) { + for (var f = [], g = 0; g < c.length; g++) f[g] = d.h(e, c[g]); + c = f; + } else c = d.h(e, c); + return (a.g[b] = c); + } + return a.g[b]; + } + return c; + } + function n(a, b, c) { + var d = t(a, b); + return a.j[b].l ? d[c || 0] : d; + } + function u(a, b) { + if (m(a, b)) a = n(a, b, void 0); + else + a: { + a = a.j[b]; + if (void 0 === a.j) + if (((b = a.s), b === Boolean)) a.j = !1; + else if (b === Number) a.j = 0; + else if (b === String) a.j = a.o ? '0' : ''; + else { + a = new b(); + break a; + } + a = a.j; + } + return a; + } + function r(a, b) { + return t(a, b) || []; + } + function v(a, b) { + return a.j[b].l ? (m(a, b) ? a.h[b].length : 0) : m(a, b) ? 1 : 0; + } + function p(a, b, c) { + a.h[b] = c; + a.g && (a.g[b] = c); + } + function na(a, b, c) { + a.h[b] || (a.h[b] = []); + a.h[b].push(c); + a.g && delete a.g[b]; + } + function w(a, b) { + var c = [], + d; + for (d in b) 0 != d && c.push(new ea(d, b[d])); + return new ca(a, c); + } + function x() {} + x.prototype.g = function (a) { + new a.h(); + throw Error('Unimplemented'); + }; + x.prototype.h = function (a, b) { + if (11 == a.h || 10 == a.h) return b instanceof k ? b : this.g(a.s.prototype.m(), b); + if (14 == a.h) return 'string' === typeof b && pa.test(b) && ((a = Number(b)), 0 < a) ? a : b; + if (!a.o) return b; + a = a.s; + if (a === String) { + if ('number' === typeof b) return String(b); + } else if ( + a === Number && + 'string' === typeof b && + ('Infinity' === b || '-Infinity' === b || 'NaN' === b || pa.test(b)) + ) + return Number(b); + return b; + }; + var pa = /^-?[0-9]+$/; + function qa() {} + h(qa, x); + qa.prototype.g = function (a, b) { + a = new a.h(); + a.l = this; + a.h = b; + a.g = {}; + return a; + }; + function y() {} + h(y, qa); + y.prototype.h = function (a, b) { + return 8 == a.h ? !!b : x.prototype.h.apply(this, arguments); + }; + y.prototype.g = function (a, b) { + return y.Ca.g.call(this, a, b); + }; + function z(a, b) { + null != a && this.g.apply(this, arguments); + } + z.prototype.h = ''; + z.prototype.set = function (a) { + this.h = '' + a; + }; + z.prototype.g = function (a, b, c) { + this.h += String(a); + if (null != b) for (let d = 1; d < arguments.length; d++) this.h += arguments[d]; + return this; + }; + function A(a) { + a.h = ''; + } + z.prototype.toString = function () { + return this.h; + }; /* + + Protocol Buffer 2 Copyright 2008 Google Inc. + All other code copyright its respective owners. + Copyright (C) 2010 The Libphonenumber Authors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + function B() { + k.call(this); + } + h(B, k); + var ra = null; + function C() { + k.call(this); + } + h(C, k); + var sa = null; + function D() { + k.call(this); + } + h(D, k); + var ta = null; + D.prototype.ha = function () { + return n(this, 10); + }; + B.prototype.m = function () { + var a = ra; + a || + (ra = a = + w(B, { + 0: { name: 'NumberFormat', ma: 'i18n.phonenumbers.NumberFormat' }, + 1: { name: 'pattern', required: !0, i: 9, type: String }, + 2: { name: 'format', required: !0, i: 9, type: String }, + 3: { name: 'leading_digits_pattern', fa: !0, i: 9, type: String }, + 4: { name: 'national_prefix_formatting_rule', i: 9, type: String }, + 6: { + name: 'national_prefix_optional_when_formatting', + i: 8, + defaultValue: !1, + type: Boolean, + }, + 5: { name: 'domestic_carrier_code_formatting_rule', i: 9, type: String }, + })); + return a; + }; + B.m = B.prototype.m; + C.prototype.m = function () { + var a = sa; + a || + (sa = a = + w(C, { + 0: { name: 'PhoneNumberDesc', ma: 'i18n.phonenumbers.PhoneNumberDesc' }, + 2: { name: 'national_number_pattern', i: 9, type: String }, + 9: { name: 'possible_length', fa: !0, i: 5, type: Number }, + 10: { name: 'possible_length_local_only', fa: !0, i: 5, type: Number }, + 6: { name: 'example_number', i: 9, type: String }, + })); + return a; + }; + C.m = C.prototype.m; + D.prototype.m = function () { + var a = ta; + a || + (ta = a = + w(D, { + 0: { name: 'PhoneMetadata', ma: 'i18n.phonenumbers.PhoneMetadata' }, + 1: { name: 'general_desc', i: 11, type: C }, + 2: { name: 'fixed_line', i: 11, type: C }, + 3: { name: 'mobile', i: 11, type: C }, + 4: { name: 'toll_free', i: 11, type: C }, + 5: { name: 'premium_rate', i: 11, type: C }, + 6: { name: 'shared_cost', i: 11, type: C }, + 7: { name: 'personal_number', i: 11, type: C }, + 8: { name: 'voip', i: 11, type: C }, + 21: { name: 'pager', i: 11, type: C }, + 25: { name: 'uan', i: 11, type: C }, + 27: { name: 'emergency', i: 11, type: C }, + 28: { name: 'voicemail', i: 11, type: C }, + 29: { name: 'short_code', i: 11, type: C }, + 30: { name: 'standard_rate', i: 11, type: C }, + 31: { name: 'carrier_specific', i: 11, type: C }, + 33: { name: 'sms_services', i: 11, type: C }, + 24: { name: 'no_international_dialling', i: 11, type: C }, + 9: { name: 'id', required: !0, i: 9, type: String }, + 10: { name: 'country_code', i: 5, type: Number }, + 11: { name: 'international_prefix', i: 9, type: String }, + 17: { name: 'preferred_international_prefix', i: 9, type: String }, + 12: { name: 'national_prefix', i: 9, type: String }, + 13: { name: 'preferred_extn_prefix', i: 9, type: String }, + 15: { name: 'national_prefix_for_parsing', i: 9, type: String }, + 16: { name: 'national_prefix_transform_rule', i: 9, type: String }, + 18: { + name: 'same_mobile_and_fixed_line_pattern', + i: 8, + defaultValue: !1, + type: Boolean, + }, + 19: { name: 'number_format', fa: !0, i: 11, type: B }, + 20: { name: 'intl_number_format', fa: !0, i: 11, type: B }, + 22: { name: 'main_country_for_code', i: 8, defaultValue: !1, type: Boolean }, + 23: { name: 'leading_digits', i: 9, type: String }, + 26: { name: 'leading_zero_possible', i: 8, defaultValue: !1, type: Boolean }, + })); + return a; + }; + D.m = D.prototype.m; + function E() { + k.call(this); + } + h(E, k); + var ua = null; + E.prototype.ha = function () { + return n(this, 1); + }; + var va = { Ha: 0, Ga: 1, Fa: 5, Ea: 10, Da: 20 }; + E.prototype.m = function () { + var a = ua; + a || + (ua = a = + w(E, { + 0: { name: 'PhoneNumber', ma: 'i18n.phonenumbers.PhoneNumber' }, + 1: { name: 'country_code', required: !0, i: 5, type: Number }, + 2: { name: 'national_number', required: !0, i: 4, type: Number }, + 3: { name: 'extension', i: 9, type: String }, + 4: { name: 'italian_leading_zero', i: 8, type: Boolean }, + 8: { name: 'number_of_leading_zeros', i: 5, defaultValue: 1, type: Number }, + 5: { name: 'raw_input', i: 9, type: String }, + 6: { name: 'country_code_source', i: 14, defaultValue: 0, type: va }, + 7: { name: 'preferred_domestic_carrier_code', i: 9, type: String }, + })); + return a; + }; + E.ctor = E; + E.ctor.m = E.prototype.m; /* + + Copyright (C) 2010 The Libphonenumber Authors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + var F = { + 1: 'US AG AI AS BB BM BS CA DM DO GD GU JM KN KY LC MP MS PR SX TC TT VC VG VI'.split(' '), + 7: ['RU', 'KZ'], + 20: ['EG'], + 27: ['ZA'], + 30: ['GR'], + 31: ['NL'], + 32: ['BE'], + 33: ['FR'], + 34: ['ES'], + 36: ['HU'], + 39: ['IT', 'VA'], + 40: ['RO'], + 41: ['CH'], + 43: ['AT'], + 44: ['GB', 'GG', 'IM', 'JE'], + 45: ['DK'], + 46: ['SE'], + 47: ['NO', 'SJ'], + 48: ['PL'], + 49: ['DE'], + 51: ['PE'], + 52: ['MX'], + 53: ['CU'], + 54: ['AR'], + 55: ['BR'], + 56: ['CL'], + 57: ['CO'], + 58: ['VE'], + 60: ['MY'], + 61: ['AU', 'CC', 'CX'], + 62: ['ID'], + 63: ['PH'], + 64: ['NZ'], + 65: ['SG'], + 66: ['TH'], + 81: ['JP'], + 82: ['KR'], + 84: ['VN'], + 86: ['CN'], + 90: ['TR'], + 91: ['IN'], + 92: ['PK'], + 93: ['AF'], + 94: ['LK'], + 95: ['MM'], + 98: ['IR'], + 211: ['SS'], + 212: ['MA', 'EH'], + 213: ['DZ'], + 216: ['TN'], + 218: ['LY'], + 220: ['GM'], + 221: ['SN'], + 222: ['MR'], + 223: ['ML'], + 224: ['GN'], + 225: ['CI'], + 226: ['BF'], + 227: ['NE'], + 228: ['TG'], + 229: ['BJ'], + 230: ['MU'], + 231: ['LR'], + 232: ['SL'], + 233: ['GH'], + 234: ['NG'], + 235: ['TD'], + 236: ['CF'], + 237: ['CM'], + 238: ['CV'], + 239: ['ST'], + 240: ['GQ'], + 241: ['GA'], + 242: ['CG'], + 243: ['CD'], + 244: ['AO'], + 245: ['GW'], + 246: ['IO'], + 247: ['AC'], + 248: ['SC'], + 249: ['SD'], + 250: ['RW'], + 251: ['ET'], + 252: ['SO'], + 253: ['DJ'], + 254: ['KE'], + 255: ['TZ'], + 256: ['UG'], + 257: ['BI'], + 258: ['MZ'], + 260: ['ZM'], + 261: ['MG'], + 262: ['RE', 'YT'], + 263: ['ZW'], + 264: ['NA'], + 265: ['MW'], + 266: ['LS'], + 267: ['BW'], + 268: ['SZ'], + 269: ['KM'], + 290: ['SH', 'TA'], + 291: ['ER'], + 297: ['AW'], + 298: ['FO'], + 299: ['GL'], + 350: ['GI'], + 351: ['PT'], + 352: ['LU'], + 353: ['IE'], + 354: ['IS'], + 355: ['AL'], + 356: ['MT'], + 357: ['CY'], + 358: ['FI', 'AX'], + 359: ['BG'], + 370: ['LT'], + 371: ['LV'], + 372: ['EE'], + 373: ['MD'], + 374: ['AM'], + 375: ['BY'], + 376: ['AD'], + 377: ['MC'], + 378: ['SM'], + 380: ['UA'], + 381: ['RS'], + 382: ['ME'], + 383: ['XK'], + 385: ['HR'], + 386: ['SI'], + 387: ['BA'], + 389: ['MK'], + 420: ['CZ'], + 421: ['SK'], + 423: ['LI'], + 500: ['FK'], + 501: ['BZ'], + 502: ['GT'], + 503: ['SV'], + 504: ['HN'], + 505: ['NI'], + 506: ['CR'], + 507: ['PA'], + 508: ['PM'], + 509: ['HT'], + 590: ['GP', 'BL', 'MF'], + 591: ['BO'], + 592: ['GY'], + 593: ['EC'], + 594: ['GF'], + 595: ['PY'], + 596: ['MQ'], + 597: ['SR'], + 598: ['UY'], + 599: ['CW', 'BQ'], + 670: ['TL'], + 672: ['NF'], + 673: ['BN'], + 674: ['NR'], + 675: ['PG'], + 676: ['TO'], + 677: ['SB'], + 678: ['VU'], + 679: ['FJ'], + 680: ['PW'], + 681: ['WF'], + 682: ['CK'], + 683: ['NU'], + 685: ['WS'], + 686: ['KI'], + 687: ['NC'], + 688: ['TV'], + 689: ['PF'], + 690: ['TK'], + 691: ['FM'], + 692: ['MH'], + 800: ['001'], + 808: ['001'], + 850: ['KP'], + 852: ['HK'], + 853: ['MO'], + 855: ['KH'], + 856: ['LA'], + 870: ['001'], + 878: ['001'], + 880: ['BD'], + 881: ['001'], + 882: ['001'], + 883: ['001'], + 886: ['TW'], + 888: ['001'], + 960: ['MV'], + 961: ['LB'], + 962: ['JO'], + 963: ['SY'], + 964: ['IQ'], + 965: ['KW'], + 966: ['SA'], + 967: ['YE'], + 968: ['OM'], + 970: ['PS'], + 971: ['AE'], + 972: ['IL'], + 973: ['BH'], + 974: ['QA'], + 975: ['BT'], + 976: ['MN'], + 977: ['NP'], + 979: ['001'], + 992: ['TJ'], + 993: ['TM'], + 994: ['AZ'], + 995: ['GE'], + 996: ['KG'], + 998: ['UZ'], + }, + G = { + AC: [ + , + [, , '(?:[01589]\\d|[46])\\d{4}', , , , , , , [5, 6]], + [, , '6[2-467]\\d{3}', , , , '62889', , , [5]], + [, , '4\\d{4}', , , , '40123', , , [5]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'AC', + 247, + '00', + , + , + , + , + , + , + , + , + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '(?:0[1-9]|[1589]\\d)\\d{4}', , , , '542011', , , [6]], + , + , + [, , , , , , , , , [-1]], + ], + AD: [ + , + [, , '(?:1|6\\d)\\d{7}|[135-9]\\d{5}', , , , , , , [6, 8, 9]], + [, , '[78]\\d{5}', , , , '712345', , , [6]], + [, , '690\\d{6}|[356]\\d{5}', , , , '312345', , , [6, 9]], + [, , '180[02]\\d{4}', , , , '18001234', , , [8]], + [, , '[19]\\d{5}', , , , '912345', , , [6]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'AD', + 376, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{3})(\\d{3})', '$1 $2', ['[135-9]']], + [, '(\\d{4})(\\d{4})', '$1 $2', ['1']], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['6']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , '1800\\d{4}', , , , , , , [8]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + AE: [ + , + [ + , + , + '(?:[4-7]\\d|9[0-689])\\d{7}|800\\d{2,9}|[2-4679]\\d{7}', + , + , + , + , + , + , + [5, 6, 7, 8, 9, 10, 11, 12], + ], + [, , '[2-4679][2-8]\\d{6}', , , , '22345678', , , [8], [7]], + [, , '5[024-68]\\d{7}', , , , '501234567', , , [9]], + [, , '400\\d{6}|800\\d{2,9}', , , , '800123456'], + [, , '900[02]\\d{5}', , , , '900234567', , , [9]], + [, , '700[05]\\d{5}', , , , '700012345', , , [9]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'AE', + 971, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{2,9})', '$1 $2', ['60|8']], + [, '(\\d)(\\d{3})(\\d{4})', '$1 $2 $3', ['[236]|[479][2-8]'], '0$1'], + [, '(\\d{3})(\\d)(\\d{5})', '$1 $2 $3', ['[479]']], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['5'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '600[25]\\d{5}', , , , '600212345', , , [9]], + , + , + [, , , , , , , , , [-1]], + ], + AF: [ + , + [, , '[2-7]\\d{8}', , , , , , , [9], [7]], + [, , '(?:[25][0-8]|[34][0-4]|6[0-5])[2-9]\\d{6}', , , , '234567890', , , , [7]], + [, , '7\\d{8}', , , , '701234567', , , , [7]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'AF', + 93, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{4})', '$1 $2', ['[1-9]']], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['[2-7]'], '0$1'], + ], + [[, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['[2-7]'], '0$1']], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + AG: [ + , + [, , '(?:268|[58]\\d\\d|900)\\d{7}', , , , , , , [10], [7]], + [, , '268(?:4(?:6[0-38]|84)|56[0-2])\\d{4}', , , , '2684601234', , , , [7]], + [ + , + , + '268(?:464|7(?:1[3-9]|[28]\\d|3[0246]|64|7[0-689]))\\d{4}', + , + , + , + '2684641234', + , + , + , + [7], + ], + [, , '8(?:00|33|44|55|66|77|88)[2-9]\\d{6}', , , , '8002123456'], + [, , '900[2-9]\\d{6}', , , , '9002123456'], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[12]|33|44|66|77|88)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , '26848[01]\\d{4}', , , , '2684801234', , , , [7]], + 'AG', + 1, + '011', + '1', + , + , + '1|([457]\\d{6})$', + '268$1', + , + , + , + , + [, , '26840[69]\\d{4}', , , , '2684061234', , , , [7]], + , + '268', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + AI: [ + , + [, , '(?:264|[58]\\d\\d|900)\\d{7}', , , , , , , [10], [7]], + [, , '264(?:292|4(?:6[12]|9[78]))\\d{4}', , , , '2644612345', , , , [7]], + [ + , + , + '264(?:235|4(?:69|76)|5(?:3[6-9]|8[1-4])|7(?:29|72))\\d{4}', + , + , + , + '2642351234', + , + , + , + [7], + ], + [, , '8(?:00|33|44|55|66|77|88)[2-9]\\d{6}', , , , '8002123456'], + [, , '900[2-9]\\d{6}', , , , '9002123456'], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[12]|33|44|66|77|88)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , , , , , , , , [-1]], + 'AI', + 1, + '011', + '1', + , + , + '1|([2457]\\d{6})$', + '264$1', + , + , + , + , + [, , '264724\\d{4}', , , , '2647241234', , , , [7]], + , + '264', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + AL: [ + , + [ + , + , + '(?:700\\d\\d|900)\\d{3}|8\\d{5,7}|(?:[2-5]|6\\d)\\d{7}', + , + , + , + , + , + , + [6, 7, 8, 9], + [5], + ], + [ + , + , + '4505[0-2]\\d{3}|(?:[2358][16-9]\\d[2-9]|4410)\\d{4}|(?:[2358][2-5][2-9]|4(?:[2-57-9][2-9]|6\\d))\\d{5}', + , + , + , + '22345678', + , + , + [8], + [5, 6, 7], + ], + [, , '6(?:[78][2-9]|9\\d)\\d{6}', , , , '672123456', , , [9]], + [, , '800\\d{4}', , , , '8001234', , , [7]], + [, , '900[1-9]\\d\\d', , , , '900123', , , [6]], + [, , '808[1-9]\\d\\d', , , , '808123', , , [6]], + [, , '700[2-9]\\d{4}', , , , '70021234', , , [8]], + [, , , , , , , , , [-1]], + 'AL', + 355, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{3,4})', '$1 $2', ['80|9'], '0$1'], + [, '(\\d)(\\d{3})(\\d{4})', '$1 $2 $3', ['4[2-6]'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{3})', '$1 $2 $3', ['[2358][2-5]|4'], '0$1'], + [, '(\\d{3})(\\d{5})', '$1 $2', ['[23578]'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['6'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + AM: [ + , + [, , '(?:[1-489]\\d|55|60|77)\\d{6}', , , , , , , [8], [5, 6]], + [ + , + , + '(?:(?:1[0-25]|47)\\d|2(?:2[2-46]|3[1-8]|4[2-69]|5[2-7]|6[1-9]|8[1-7])|3[12]2)\\d{5}', + , + , + , + '10123456', + , + , + , + [5, 6], + ], + [, , '(?:33|4[1349]|55|77|88|9[13-9])\\d{6}', , , , '77123456'], + [, , '800\\d{5}', , , , '80012345'], + [, , '90[016]\\d{5}', , , , '90012345'], + [, , '80[1-4]\\d{5}', , , , '80112345'], + [, , , , , , , , , [-1]], + [, , '60(?:2[78]|3[5-9]|4[02-9]|5[0-46-9]|[6-8]\\d|9[01])\\d{4}', , , , '60271234'], + 'AM', + 374, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{2})(\\d{3})', '$1 $2 $3', ['[89]0'], '0 $1'], + [, '(\\d{3})(\\d{5})', '$1 $2', ['2|3[12]'], '(0$1)'], + [, '(\\d{2})(\\d{6})', '$1 $2', ['1|47'], '(0$1)'], + [, '(\\d{2})(\\d{6})', '$1 $2', ['[3-9]'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + AO: [ + , + [, , '[29]\\d{8}', , , , , , , [9]], + [, , '2\\d(?:[0134][25-9]|[25-9]\\d)\\d{5}', , , , '222123456'], + [, , '9[1-49]\\d{7}', , , , '923123456'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'AO', + 244, + '00', + , + , + , + , + , + , + , + [[, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['[29]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + AR: [ + , + [, , '(?:11|[89]\\d\\d)\\d{8}|[2368]\\d{9}', , , , , , , [10, 11], [6, 7, 8]], + [ + , + , + '3888[013-9]\\d{5}|(?:29(?:54|66)|3(?:777|865))[2-8]\\d{5}|3(?:7(?:1[15]|81)|8(?:21|4[16]|69|9[12]))[46]\\d{5}|(?:2(?:2(?:2[59]|44|52)|3(?:26|44)|473|9(?:[07]2|2[26]|34|46))|3327)[45]\\d{5}|(?:2(?:284|302|657|920)|3(?:4(?:8[27]|92)|541|755|878))[2-7]\\d{5}|(?:2(?:(?:26|62)2|32[03]|477|9(?:42|83))|3(?:329|4(?:[47]6|62|89)|564))[2-6]\\d{5}|(?:(?:11[1-8]|670)\\d|2(?:2(?:0[45]|1[2-6]|3[3-6])|3(?:[06]4|7[45])|494|6(?:04|1[2-8]|[36][45]|4[3-6])|80[45]|9(?:[17][4-6]|[48][45]|9[3-6]))|3(?:364|4(?:1[2-7]|[235][4-6]|84)|5(?:1[2-8]|[38][4-6])|6(?:2[45]|44)|7[069][45]|8(?:[03][45]|[17][2-6]|[58][3-6])))\\d{6}|2(?:2(?:21|4[23]|6[145]|7[1-4]|8[356]|9[267])|3(?:16|3[13-8]|43|5[346-8]|9[3-5])|475|6(?:2[46]|4[78]|5[1568])|9(?:03|2[1457-9]|3[1356]|4[08]|[56][23]|82))4\\d{5}|(?:2(?:2(?:57|81)|3(?:24|46|92)|9(?:01|23|64))|3(?:4(?:42|71)|5(?:25|37|4[347]|71)|7(?:18|5[17])))[3-6]\\d{5}|(?:2(?:2(?:02|2[3467]|4[156]|5[45]|6[6-8]|91)|3(?:1[47]|25|[45][25]|96)|47[48]|625|932)|3(?:38[2578]|4(?:0[0-24-9]|3[78]|4[457]|58|6[03-9]|72|83|9[136-8])|5(?:2[124]|[368][23]|4[2689]|7[2-6])|7(?:16|2[15]|3[145]|4[13]|5[468]|7[2-5]|8[26])|8(?:2[5-7]|3[278]|4[3-5]|5[78]|6[1-378]|[78]7|94)))[4-6]\\d{5}', + , + , + , + '1123456789', + , + , + [10], + [6, 7, 8], + ], + [ + , + , + '93888[013-9]\\d{5}|9(?:29(?:54|66)|3(?:777|865))[2-8]\\d{5}|93(?:7(?:1[15]|81)|8(?:21|4[16]|69|9[12]))[46]\\d{5}|9(?:2(?:2(?:2[59]|44|52)|3(?:26|44)|473|9(?:[07]2|2[26]|34|46))|3327)[45]\\d{5}|9(?:2(?:284|302|657|920)|3(?:4(?:8[27]|92)|541|755|878))[2-7]\\d{5}|9(?:2(?:(?:26|62)2|32[03]|477|9(?:42|83))|3(?:329|4(?:[47]6|62|89)|564))[2-6]\\d{5}|(?:675\\d|9(?:11[1-8]\\d|2(?:2(?:0[45]|1[2-6]|3[3-6])|3(?:[06]4|7[45])|494|6(?:04|1[2-8]|[36][45]|4[3-6])|80[45]|9(?:[17][4-6]|[48][45]|9[3-6]))|3(?:364|4(?:1[2-7]|[235][4-6]|84)|5(?:1[2-8]|[38][4-6])|6(?:2[45]|44)|7[069][45]|8(?:[03][45]|[17][2-6]|[58][3-6]))))\\d{6}|92(?:2(?:21|4[23]|6[145]|7[1-4]|8[356]|9[267])|3(?:16|3[13-8]|43|5[346-8]|9[3-5])|475|6(?:2[46]|4[78]|5[1568])|9(?:03|2[1457-9]|3[1356]|4[08]|[56][23]|82))4\\d{5}|9(?:2(?:2(?:57|81)|3(?:24|46|92)|9(?:01|23|64))|3(?:4(?:42|71)|5(?:25|37|4[347]|71)|7(?:18|5[17])))[3-6]\\d{5}|9(?:2(?:2(?:02|2[3467]|4[156]|5[45]|6[6-8]|91)|3(?:1[47]|25|[45][25]|96)|47[48]|625|932)|3(?:38[2578]|4(?:0[0-24-9]|3[78]|4[457]|58|6[03-9]|72|83|9[136-8])|5(?:2[124]|[368][23]|4[2689]|7[2-6])|7(?:16|2[15]|3[145]|4[13]|5[468]|7[2-5]|8[26])|8(?:2[5-7]|3[278]|4[3-5]|5[78]|6[1-378]|[78]7|94)))[4-6]\\d{5}', + , + , + , + '91123456789', + , + , + , + [6, 7, 8], + ], + [, , '800\\d{7,8}', , , , '8001234567'], + [, , '60[04579]\\d{7}', , , , '6001234567', , , [10]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'AR', + 54, + '00', + '0', + , + , + '0?(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:02?|1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[67])|4(?:7[3-578]|9)|6(?:[0136]|2[24-6]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\d|3[1-6]|4[02568]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|6|8[2578])|4(?:0[0-24-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6[02-9]|7[126]|8[2379]?|9[1-36-8])|5(?:1|2[1245]|3[237]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:[069]|1[1568]|2[15]|3[145]|4[13]|5[14-8]|7[2-57]|8[126])|8(?:[01]|2[15-7]|3[2578]?|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))15)?', + '9$1', + , + , + [ + [, '(\\d{3})', '$1', ['0|1(?:0[0-35-7]|1[02-5]|2[015]|3[47]|4[478])|911']], + [, '(\\d{2})(\\d{4})', '$1-$2', ['[1-9]']], + [, '(\\d{3})(\\d{4})', '$1-$2', ['[2-8]']], + [, '(\\d{4})(\\d{4})', '$1-$2', ['[1-8]']], + [ + , + '(\\d{4})(\\d{2})(\\d{4})', + '$1 $2-$3', + [ + '2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9])', + '2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8]))|2(?:2[24-9]|3[1-59]|47)', + '2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5[56][46]|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]', + '2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|58|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|54(?:4|5[13-7]|6[89])|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:454|85[56])[46]|3(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]', + ], + '0$1', + , + 1, + ], + [, '(\\d{2})(\\d{4})(\\d{4})', '$1 $2-$3', ['1'], '0$1', , 1], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1-$2-$3', ['[68]'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2-$3', ['[23]'], '0$1', , 1], + [ + , + '(\\d)(\\d{4})(\\d{2})(\\d{4})', + '$2 15-$3-$4', + [ + '9(?:2[2-469]|3[3-578])', + '9(?:2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9]))', + '9(?:2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8])))|92(?:2[24-9]|3[1-59]|47)', + '9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5(?:[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]', + '9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|5(?:4(?:4|5[13-7]|6[89])|[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]', + ], + '0$1', + ], + [, '(\\d)(\\d{2})(\\d{4})(\\d{4})', '$2 15-$3-$4', ['91'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{5})', '$1-$2-$3', ['8'], '0$1'], + [, '(\\d)(\\d{3})(\\d{3})(\\d{4})', '$2 15-$3-$4', ['9'], '0$1'], + ], + [ + [ + , + '(\\d{4})(\\d{2})(\\d{4})', + '$1 $2-$3', + [ + '2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9])', + '2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8]))|2(?:2[24-9]|3[1-59]|47)', + '2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5[56][46]|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]', + '2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|58|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|54(?:4|5[13-7]|6[89])|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:454|85[56])[46]|3(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]', + ], + '0$1', + , + 1, + ], + [, '(\\d{2})(\\d{4})(\\d{4})', '$1 $2-$3', ['1'], '0$1', , 1], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1-$2-$3', ['[68]'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2-$3', ['[23]'], '0$1', , 1], + [ + , + '(\\d)(\\d{4})(\\d{2})(\\d{4})', + '$1 $2 $3-$4', + [ + '9(?:2[2-469]|3[3-578])', + '9(?:2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9]))', + '9(?:2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8])))|92(?:2[24-9]|3[1-59]|47)', + '9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5(?:[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]', + '9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|5(?:4(?:4|5[13-7]|6[89])|[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]', + ], + ], + [, '(\\d)(\\d{2})(\\d{4})(\\d{4})', '$1 $2 $3-$4', ['91']], + [, '(\\d{3})(\\d{3})(\\d{5})', '$1-$2-$3', ['8'], '0$1'], + [, '(\\d)(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3-$4', ['9']], + ], + [, , , , , , , , , [-1]], + , + , + [, , '810\\d{7}', , , , , , , [10]], + [, , '810\\d{7}', , , , '8101234567', , , [10]], + , + , + [, , , , , , , , , [-1]], + ], + AS: [ + , + [, , '(?:[58]\\d\\d|684|900)\\d{7}', , , , , , , [10], [7]], + [, , '6846(?:22|33|44|55|77|88|9[19])\\d{4}', , , , '6846221234', , , , [7]], + [, , '684(?:2(?:48|5[2468]|72)|7(?:3[13]|70|82))\\d{4}', , , , '6847331234', , , , [7]], + [, , '8(?:00|33|44|55|66|77|88)[2-9]\\d{6}', , , , '8002123456'], + [, , '900[2-9]\\d{6}', , , , '9002123456'], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[12]|33|44|66|77|88)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , , , , , , , , [-1]], + 'AS', + 1, + '011', + '1', + , + , + '1|([267]\\d{6})$', + '684$1', + , + , + , + , + [, , , , , , , , , [-1]], + , + '684', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + AT: [ + , + [ + , + , + '1\\d{3,12}|2\\d{6,12}|43(?:(?:0\\d|5[02-9])\\d{3,9}|2\\d{4,5}|[3467]\\d{4}|8\\d{4,6}|9\\d{4,7})|5\\d{4,12}|8\\d{7,12}|9\\d{8,12}|(?:[367]\\d|4[0-24-9])\\d{4,11}', + , + , + , + , + , + , + [4, 5, 6, 7, 8, 9, 10, 11, 12, 13], + [3], + ], + [ + , + , + '1(?:11\\d|[2-9]\\d{3,11})|(?:316|463|(?:51|66|73)2)\\d{3,10}|(?:2(?:1[467]|2[13-8]|5[2357]|6[1-46-8]|7[1-8]|8[124-7]|9[1458])|3(?:1[1-578]|3[23568]|4[5-7]|5[1378]|6[1-38]|8[3-68])|4(?:2[1-8]|35|7[1368]|8[2457])|5(?:2[1-8]|3[357]|4[147]|5[12578]|6[37])|6(?:13|2[1-47]|4[135-8]|5[468])|7(?:2[1-8]|35|4[13478]|5[68]|6[16-8]|7[1-6]|9[45]))\\d{4,10}', + , + , + , + '1234567890', + , + , + , + [3], + ], + [ + , + , + '6(?:5[0-3579]|6[013-9]|[7-9]\\d)\\d{4,10}', + , + , + , + '664123456', + , + , + [7, 8, 9, 10, 11, 12, 13], + ], + [, , '800\\d{6,10}', , , , '800123456', , , [9, 10, 11, 12, 13]], + [ + , + , + '(?:8[69][2-68]|9(?:0[01]|3[019]))\\d{6,10}', + , + , + , + '900123456', + , + , + [9, 10, 11, 12, 13], + ], + [, , '8(?:10|2[018])\\d{6,10}|828\\d{5}', , , , '810123456', , , [8, 9, 10, 11, 12, 13]], + [, , , , , , , , , [-1]], + [ + , + , + '5(?:0[1-9]|17|[79]\\d)\\d{2,10}|7[28]0\\d{6,10}', + , + , + , + '780123456', + , + , + [5, 6, 7, 8, 9, 10, 11, 12, 13], + ], + 'AT', + 43, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d)(\\d{3,12})', '$1 $2', ['1(?:11|[2-9])'], '0$1'], + [, '(\\d{3})(\\d{2})', '$1 $2', ['517'], '0$1'], + [, '(\\d{2})(\\d{3,5})', '$1 $2', ['5[079]'], '0$1'], + [, '(\\d{6})', '$1', ['1']], + [ + , + '(\\d{3})(\\d{3,10})', + '$1 $2', + ['(?:31|4)6|51|6(?:5[0-3579]|[6-9])|7(?:20|32|8)|[89]'], + '0$1', + ], + [, '(\\d{4})(\\d{3,9})', '$1 $2', ['[2-467]|5[2-6]'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['5'], '0$1'], + [, '(\\d{2})(\\d{4})(\\d{4,7})', '$1 $2 $3', ['5'], '0$1'], + ], + [ + [, '(\\d)(\\d{3,12})', '$1 $2', ['1(?:11|[2-9])'], '0$1'], + [, '(\\d{3})(\\d{2})', '$1 $2', ['517'], '0$1'], + [, '(\\d{2})(\\d{3,5})', '$1 $2', ['5[079]'], '0$1'], + [ + , + '(\\d{3})(\\d{3,10})', + '$1 $2', + ['(?:31|4)6|51|6(?:5[0-3579]|[6-9])|7(?:20|32|8)|[89]'], + '0$1', + ], + [, '(\\d{4})(\\d{3,9})', '$1 $2', ['[2-467]|5[2-6]'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['5'], '0$1'], + [, '(\\d{2})(\\d{4})(\\d{4,7})', '$1 $2 $3', ['5'], '0$1'], + ], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + AU: [ + , + [ + , + , + '1(?:[0-79]\\d{7}(?:\\d(?:\\d{2})?)?|8[0-24-9]\\d{7})|[2-478]\\d{8}|1\\d{4,7}', + , + , + , + , + , + , + [5, 6, 7, 8, 9, 10, 12], + ], + [ + , + , + '(?:(?:2(?:[0-26-9]\\d|3[0-8]|4[02-9]|5[0135-9])|3(?:[0-3589]\\d|4[0-578]|6[1-9]|7[0-35-9])|7(?:[013-57-9]\\d|2[0-8]))\\d{3}|8(?:51(?:0(?:0[03-9]|[12479]\\d|3[2-9]|5[0-8]|6[1-9]|8[0-7])|1(?:[0235689]\\d|1[0-69]|4[0-589]|7[0-47-9])|2(?:0[0-79]|[18][13579]|2[14-9]|3[0-46-9]|[4-6]\\d|7[89]|9[0-4]))|(?:6[0-8]|[78]\\d)\\d{3}|9(?:[02-9]\\d{3}|1(?:(?:[0-58]\\d|6[0135-9])\\d|7(?:0[0-24-9]|[1-9]\\d)|9(?:[0-46-9]\\d|5[0-79])))))\\d{3}', + , + , + , + '212345678', + , + , + [9], + [8], + ], + [ + , + , + '4(?:83[0-38]|93[0-6])\\d{5}|4(?:[0-3]\\d|4[047-9]|5[0-25-9]|6[06-9]|7[02-9]|8[0-24-9]|9[0-27-9])\\d{6}', + , + , + , + '412345678', + , + , + [9], + ], + [, , '180(?:0\\d{3}|2)\\d{3}', , , , '1800123456', , , [7, 10]], + [, , '190[0-26]\\d{6}', , , , '1900123456', , , [10]], + [ + , + , + '13(?:00\\d{6}(?:\\d{2})?|45[0-4]\\d{3})|13\\d{4}', + , + , + , + '1300123456', + , + , + [6, 8, 10, 12], + ], + [, , , , , , , , , [-1]], + [, , '14(?:5(?:1[0458]|[23][458])|71\\d)\\d{4}', , , , '147101234', , , [9]], + 'AU', + 61, + '001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011', + '0', + , + , + '0|(183[12])', + , + '0011', + , + [ + [, '(\\d{2})(\\d{3,4})', '$1 $2', ['16'], '0$1'], + [, '(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3', ['13']], + [, '(\\d{3})(\\d{3})', '$1 $2', ['19']], + [, '(\\d{3})(\\d{4})', '$1 $2', ['180', '1802']], + [, '(\\d{4})(\\d{3,4})', '$1 $2', ['19']], + [, '(\\d{2})(\\d{3})(\\d{2,4})', '$1 $2 $3', ['16'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['14|4'], '0$1'], + [, '(\\d)(\\d{4})(\\d{4})', '$1 $2 $3', ['[2378]'], '(0$1)', '$CC ($1)'], + [, '(\\d{4})(\\d{3})(\\d{3})', '$1 $2 $3', ['1(?:30|[89])']], + [, '(\\d{4})(\\d{4})(\\d{4})', '$1 $2 $3', ['130']], + ], + [ + [, '(\\d{2})(\\d{3,4})', '$1 $2', ['16'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{2,4})', '$1 $2 $3', ['16'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['14|4'], '0$1'], + [, '(\\d)(\\d{4})(\\d{4})', '$1 $2 $3', ['[2378]'], '(0$1)', '$CC ($1)'], + [, '(\\d{4})(\\d{3})(\\d{3})', '$1 $2 $3', ['1(?:30|[89])']], + ], + [, , '163\\d{2,6}', , , , '1631234', , , [5, 6, 7, 8, 9]], + 1, + , + [ + , + , + '1(?:3(?:00\\d{5}|45[0-4])|802)\\d{3}|1[38]00\\d{6}|13\\d{4}', + , + , + , + , + , + , + [6, 7, 8, 10, 12], + ], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + AW: [ + , + [, , '(?:[25-79]\\d\\d|800)\\d{4}', , , , , , , [7]], + [, , '5(?:2\\d|8[1-9])\\d{4}', , , , '5212345'], + [ + , + , + '(?:290|5[69]\\d|6(?:[03]0|22|4[0-2]|[69]\\d)|7(?:[34]\\d|7[07])|9(?:6[45]|9[4-8]))\\d{4}', + , + , + , + '5601234', + ], + [, , '800\\d{4}', , , , '8001234'], + [, , '900\\d{4}', , , , '9001234'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '(?:28\\d|501)\\d{4}', , , , '5011234'], + 'AW', + 297, + '00', + , + , + , + , + , + , + , + [[, '(\\d{3})(\\d{4})', '$1 $2', ['[25-9]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + AX: [ + , + [ + , + , + '2\\d{4,9}|35\\d{4,5}|(?:60\\d\\d|800)\\d{4,6}|7\\d{5,11}|(?:[14]\\d|3[0-46-9]|50)\\d{4,8}', + , + , + , + , + , + , + [5, 6, 7, 8, 9, 10, 11, 12], + ], + [, , '18[1-8]\\d{3,6}', , , , '181234567', , , [6, 7, 8, 9]], + [, , '4946\\d{2,6}|(?:4[0-8]|50)\\d{4,8}', , , , '412345678', , , [6, 7, 8, 9, 10]], + [, , '800\\d{4,6}', , , , '800123456', , , [7, 8, 9]], + [, , '[67]00\\d{5,6}', , , , '600123456', , , [8, 9]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'AX', + 358, + '00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))', + '0', + , + , + '0', + , + '00', + , + , + , + [, , , , , , , , , [-1]], + , + '18', + [, , , , , , , , , [-1]], + [ + , + , + '20\\d{4,8}|60[12]\\d{5,6}|7(?:099\\d{4,5}|5[03-9]\\d{3,7})|20[2-59]\\d\\d|(?:606|7(?:0[78]|1|3\\d))\\d{7}|(?:10|29|3[09]|70[1-5]\\d)\\d{4,8}', + , + , + , + '10112345', + ], + , + , + [, , , , , , , , , [-1]], + ], + AZ: [ + , + [, , '365\\d{6}|(?:[124579]\\d|60|88)\\d{7}', , , , , , , [9], [7]], + [ + , + , + '(?:2[12]428|3655[02])\\d{4}|(?:2(?:22[0-79]|63[0-28])|3654)\\d{5}|(?:(?:1[28]|46)\\d|2(?:[014-6]2|[23]3))\\d{6}', + , + , + , + '123123456', + , + , + , + [7], + ], + [, , '36554\\d{4}|(?:[16]0|4[04]|5[015]|7[07]|99)\\d{7}', , , , '401234567'], + [, , '88\\d{7}', , , , '881234567'], + [, , '900200\\d{3}', , , , '900200123'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'AZ', + 994, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{2})(\\d{2})', '$1 $2 $3', ['[1-9]']], + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['90'], '0$1'], + [ + , + '(\\d{2})(\\d{3})(\\d{2})(\\d{2})', + '$1 $2 $3 $4', + ['1[28]|2|365|46', '1[28]|2|365[45]|46', '1[28]|2|365(?:4|5[02])|46'], + '(0$1)', + ], + [, '(\\d{2})(\\d{3})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[13-9]'], '0$1'], + ], + [ + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['90'], '0$1'], + [ + , + '(\\d{2})(\\d{3})(\\d{2})(\\d{2})', + '$1 $2 $3 $4', + ['1[28]|2|365|46', '1[28]|2|365[45]|46', '1[28]|2|365(?:4|5[02])|46'], + '(0$1)', + ], + [, '(\\d{2})(\\d{3})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[13-9]'], '0$1'], + ], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + BA: [ + , + [, , '6\\d{8}|(?:[35689]\\d|49|70)\\d{6}', , , , , , , [8, 9], [6]], + [ + , + , + '(?:3(?:[05-79][2-9]|1[4579]|[23][24-9]|4[2-4689]|8[2457-9])|49[2-579]|5(?:0[2-49]|[13][2-9]|[268][2-4679]|4[4689]|5[2-79]|7[2-69]|9[2-4689]))\\d{5}', + , + , + , + '30212345', + , + , + [8], + [6], + ], + [, , '6040\\d{5}|6(?:03|[1-356]|44|7\\d)\\d{6}', , , , '61123456'], + [, , '8[08]\\d{6}', , , , '80123456', , , [8]], + [, , '9[0246]\\d{6}', , , , '90123456', , , [8]], + [, , '8[12]\\d{6}', , , , '82123456', , , [8]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'BA', + 387, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{3})', '$1-$2', ['[2-9]']], + [, '(\\d{2})(\\d{3})(\\d{3})', '$1 $2 $3', ['6[1-3]|[7-9]'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{3})', '$1 $2-$3', ['[3-5]|6[56]'], '0$1'], + [, '(\\d{2})(\\d{2})(\\d{2})(\\d{3})', '$1 $2 $3 $4', ['6'], '0$1'], + ], + [ + [, '(\\d{2})(\\d{3})(\\d{3})', '$1 $2 $3', ['6[1-3]|[7-9]'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{3})', '$1 $2-$3', ['[3-5]|6[56]'], '0$1'], + [, '(\\d{2})(\\d{2})(\\d{2})(\\d{3})', '$1 $2 $3 $4', ['6'], '0$1'], + ], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '703[235]0\\d{3}|70(?:2[0-5]|3[0146]|[56]0)\\d{4}', , , , '70341234', , , [8]], + , + , + [, , , , , , , , , [-1]], + ], + BB: [ + , + [, , '(?:246|[58]\\d\\d|900)\\d{7}', , , , , , , [10], [7]], + [ + , + , + '246(?:2(?:2[78]|7[0-4])|4(?:1[024-6]|2\\d|3[2-9])|5(?:20|[34]\\d|54|7[1-3])|6(?:2\\d|38)|7[35]7|9(?:1[89]|63))\\d{4}', + , + , + , + '2464123456', + , + , + , + [7], + ], + [ + , + , + '246(?:2(?:[3568]\\d|4[0-57-9])|45\\d|69[5-7]|8(?:[2-5]\\d|83))\\d{4}', + , + , + , + '2462501234', + , + , + , + [7], + ], + [, , '8(?:00|33|44|55|66|77|88)[2-9]\\d{6}', , , , '8002123456'], + [, , '(?:246976|900[2-9]\\d\\d)\\d{4}', , , , '9002123456', , , , [7]], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[12]|33|44|66|77|88)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , '24631\\d{5}', , , , '2463101234', , , , [7]], + 'BB', + 1, + '011', + '1', + , + , + '1|([2-9]\\d{6})$', + '246$1', + , + , + , + , + [, , , , , , , , , [-1]], + , + '246', + [, , , , , , , , , [-1]], + [ + , + , + '246(?:292|367|4(?:1[7-9]|3[01]|44|67)|7(?:36|53))\\d{4}', + , + , + , + '2464301234', + , + , + , + [7], + ], + , + , + [, , , , , , , , , [-1]], + ], + BD: [ + , + [ + , + , + '[1-469]\\d{9}|8[0-79]\\d{7,8}|[2-79]\\d{8}|[2-9]\\d{7}|[3-9]\\d{6}|[57-9]\\d{5}', + , + , + , + , + , + , + [6, 7, 8, 9, 10], + ], + [ + , + , + '(?:4(?:31\\d\\d|423)|5222)\\d{3}(?:\\d{2})?|8332[6-9]\\d\\d|(?:3(?:03[56]|224)|4(?:22[25]|653))\\d{3,4}|(?:3(?:42[47]|529|823)|4(?:027|525|65(?:28|8))|562|6257|7(?:1(?:5[3-5]|6[12]|7[156]|89)|22[589]56|32|42675|52(?:[25689](?:56|8)|[347]8)|71(?:6[1267]|75|89)|92374)|82(?:2[59]|32)56|9(?:03[23]56|23(?:256|373)|31|5(?:1|2[4589]56)))\\d{3}|(?:3(?:02[348]|22[35]|324|422)|4(?:22[67]|32[236-9]|6(?:2[46]|5[57])|953)|5526|6(?:024|6655)|81)\\d{4,5}|(?:2(?:7(?:1[0-267]|2[0-289]|3[0-29]|4[01]|5[1-3]|6[013]|7[0178]|91)|8(?:0[125]|1[1-6]|2[0157-9]|3[1-69]|41|6[1-35]|7[1-5]|8[1-8]|9[0-6])|9(?:0[0-2]|1[0-4]|2[568]|3[3-6]|5[5-7]|6[0136-9]|7[0-7]|8[014-9]))|3(?:0(?:2[025-79]|3[2-4])|181|22[12]|32[2356]|824)|4(?:02[09]|22[348]|32[045]|523|6(?:27|54))|666(?:22|53)|7(?:22[57-9]|42[56]|82[35])8|8(?:0[124-9]|2(?:181|2[02-4679]8)|4[12]|[5-7]2)|9(?:[04]2|2(?:2|328)|81))\\d{4}|(?:2(?:222|[45]\\d)\\d|3(?:1(?:2[5-7]|[5-7])|425|822)|4(?:033|1\\d|[257]1|332|4(?:2[246]|5[25])|6(?:2[35]|56|62)|8(?:23|54)|92[2-5])|5(?:02[03489]|22[457]|32[35-79]|42[46]|6(?:[18]|53)|724|826)|6(?:023|2(?:2[2-5]|5[3-5]|8)|32[3478]|42[34]|52[47]|6(?:[18]|6(?:2[34]|5[24]))|[78]2[2-5]|92[2-6])|7(?:02|21\\d|[3-589]1|6[12]|72[24])|8(?:217|3[12]|[5-7]1)|9[24]1)\\d{5}|(?:(?:3[2-8]|5[2-57-9]|6[03-589])1|4[4689][18])\\d{5}|[59]1\\d{5}', + , + , + , + '27111234', + ], + [ + , + , + '(?:1[13-9]\\d|644)\\d{7}|(?:3[78]|44|66)[02-9]\\d{7}', + , + , + , + '1812345678', + , + , + [10], + ], + [, , '80[03]\\d{7}', , , , '8001234567', , , [10]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '96(?:0[469]|1[0-47]|3[389]|6[69]|7[78])\\d{6}', , , , '9604123456', , , [10]], + 'BD', + 880, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{2})(\\d{4,6})', '$1-$2', ['31[5-8]|[459]1'], '0$1'], + [ + , + '(\\d{3})(\\d{3,7})', + '$1-$2', + [ + '3(?:[67]|8[013-9])|4(?:6[168]|7|[89][18])|5(?:6[128]|9)|6(?:28|4[14]|5)|7[2-589]|8(?:0[014-9]|[12])|9[358]|(?:3[2-5]|4[235]|5[2-578]|6[0389]|76|8[3-7]|9[24])1|(?:44|66)[01346-9]', + ], + '0$1', + ], + [, '(\\d{4})(\\d{3,6})', '$1-$2', ['[13-9]|22'], '0$1'], + [, '(\\d)(\\d{7,8})', '$1-$2', ['2'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + BE: [ + , + [, , '4\\d{8}|[1-9]\\d{7}', , , , , , , [8, 9]], + [ + , + , + '80[2-8]\\d{5}|(?:1[0-69]|[23][2-8]|4[23]|5\\d|6[013-57-9]|71|8[1-79]|9[2-4])\\d{6}', + , + , + , + '12345678', + , + , + [8], + ], + [, , '4[5-9]\\d{7}', , , , '470123456', , , [9]], + [, , '800[1-9]\\d{4}', , , , '80012345', , , [8]], + [ + , + , + '(?:70(?:2[0-57]|3[04-7]|44|69|7[0579])|90(?:0[0-8]|1[36]|2[0-3568]|3[013-689]|[47][2-68]|5[1-68]|6[0-378]|9[34679]))\\d{4}', + , + , + , + '90012345', + , + , + [8], + ], + [, , '7879\\d{4}', , , , '78791234', , , [8]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'BE', + 32, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{2})(\\d{3})', '$1 $2 $3', ['(?:80|9)0'], '0$1'], + [, '(\\d)(\\d{3})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[239]|4[23]'], '0$1'], + [, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[15-8]'], '0$1'], + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['4'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [ + , + , + '78(?:0[57]|1[0458]|2[25]|3[15-8]|48|[56]0|7[078]|9\\d)\\d{4}', + , + , + , + '78102345', + , + , + [8], + ], + , + , + [, , , , , , , , , [-1]], + ], + BF: [ + , + [, , '[025-7]\\d{7}', , , , , , , [8]], + [ + , + , + '2(?:0(?:49|5[23]|6[56]|9[016-9])|4(?:4[569]|5[4-6]|6[56]|7[0179])|5(?:[34]\\d|50|6[5-7]))\\d{4}', + , + , + , + '20491234', + ], + [, , '(?:0[1267]|5[1-8]|[67]\\d)\\d{6}', , , , '70123456'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'BF', + 226, + '00', + , + , + , + , + , + , + , + [[, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[025-7]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + BG: [ + , + [, , '[2-7]\\d{6,7}|[89]\\d{6,8}|2\\d{5}', , , , , , , [6, 7, 8, 9], [4, 5]], + [ + , + , + '2\\d{5,7}|(?:43[1-6]|70[1-9])\\d{4,5}|(?:[36]\\d|4[124-7]|[57][1-9]|8[1-6]|9[1-7])\\d{5,6}', + , + , + , + '2123456', + , + , + [6, 7, 8], + [4, 5], + ], + [ + , + , + '43[07-9]\\d{5}|(?:48|8[7-9]\\d|9(?:8\\d|9[69]))\\d{6}', + , + , + , + '48123456', + , + , + [8, 9], + ], + [, , '800\\d{5}', , , , '80012345', , , [8]], + [, , '90\\d{6}', , , , '90123456', , , [8]], + [, , '700\\d{5}', , , , '70012345', , , [8]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'BG', + 359, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{6})', '$1', ['1']], + [, '(\\d)(\\d)(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['2'], '0$1'], + [, '(\\d{3})(\\d{4})', '$1 $2', ['43[1-6]|70[1-9]'], '0$1'], + [, '(\\d)(\\d{3})(\\d{3,4})', '$1 $2 $3', ['2'], '0$1'], + [ + , + '(\\d{2})(\\d{3})(\\d{2,3})', + '$1 $2 $3', + ['[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]'], + '0$1', + ], + [, '(\\d{3})(\\d{2})(\\d{3})', '$1 $2 $3', ['(?:70|8)0'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{2})', '$1 $2 $3', ['43[1-7]|7'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['[48]|9[08]'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['9'], '0$1'], + ], + [ + [, '(\\d)(\\d)(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['2'], '0$1'], + [, '(\\d{3})(\\d{4})', '$1 $2', ['43[1-6]|70[1-9]'], '0$1'], + [, '(\\d)(\\d{3})(\\d{3,4})', '$1 $2 $3', ['2'], '0$1'], + [ + , + '(\\d{2})(\\d{3})(\\d{2,3})', + '$1 $2 $3', + ['[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]'], + '0$1', + ], + [, '(\\d{3})(\\d{2})(\\d{3})', '$1 $2 $3', ['(?:70|8)0'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{2})', '$1 $2 $3', ['43[1-7]|7'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['[48]|9[08]'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['9'], '0$1'], + ], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + BH: [ + , + [, , '[136-9]\\d{7}', , , , , , , [8]], + [ + , + , + '(?:1(?:3[1356]|6[0156]|7\\d)\\d|6(?:1[16]\\d|500|6(?:0\\d|3[12]|44|7[7-9]|88)|9[69][69])|7(?:1(?:11|78)|7\\d\\d))\\d{4}', + , + , + , + '17001234', + ], + [ + , + , + '(?:3(?:[1-79]\\d|8[0-47-9])\\d|6(?:3(?:00|33|6[16])|6(?:3[03-9]|[69]\\d|7[0-6])))\\d{4}', + , + , + , + '36001234', + ], + [, , '80\\d{6}', , , , '80123456'], + [, , '(?:87|9[014578])\\d{6}', , , , '90123456'], + [, , '84\\d{6}', , , , '84123456'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'BH', + 973, + '00', + , + , + , + , + , + , + , + [[, '(\\d{4})(\\d{4})', '$1 $2', ['[13679]|8[047]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + BI: [ + , + [, , '(?:[267]\\d|31)\\d{6}', , , , , , , [8]], + [, , '22\\d{6}', , , , '22201234'], + [, , '(?:29|31|6[1257-9]|7[125-9])\\d{6}', , , , '79561234'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'BI', + 257, + '00', + , + , + , + , + , + , + , + [[, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[2367]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + BJ: [ + , + [, , '[25689]\\d{7}', , , , , , , [8]], + [, , '2(?:02|1[037]|2[45]|3[68])\\d{5}', , , , '20211234'], + [, , '(?:5[1-35-8]|6\\d|9[013-9])\\d{6}', , , , '90011234'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '857[58]\\d{4}', , , , '85751234'], + 'BJ', + 229, + '00', + , + , + , + , + , + , + , + [[, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[25689]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '81\\d{6}', , , , '81123456'], + , + , + [, , , , , , , , , [-1]], + ], + BL: [ + , + [, , '(?:590|(?:69|80)\\d|976)\\d{6}', , , , , , , [9]], + [, , '590(?:2[7-9]|5[12]|87)\\d{4}', , , , '590271234'], + [, , '69(?:0\\d\\d|1(?:2[2-9]|3[0-5]))\\d{4}', , , , '690001234'], + [, , '80[0-5]\\d{6}', , , , '800012345'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '976[01]\\d{5}', , , , '976012345'], + 'BL', + 590, + '00', + '0', + , + , + '0', + , + , + , + , + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + BM: [ + , + [, , '(?:441|[58]\\d\\d|900)\\d{7}', , , , , , , [10], [7]], + [, , '441(?:[46]\\d\\d|5(?:4\\d|60|89))\\d{4}', , , , '4414123456', , , , [7]], + [, , '441(?:[2378]\\d|5[0-39])\\d{5}', , , , '4413701234', , , , [7]], + [, , '8(?:00|33|44|55|66|77|88)[2-9]\\d{6}', , , , '8002123456'], + [, , '900[2-9]\\d{6}', , , , '9002123456'], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[12]|33|44|66|77|88)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , , , , , , , , [-1]], + 'BM', + 1, + '011', + '1', + , + , + '1|([2-8]\\d{6})$', + '441$1', + , + , + , + , + [, , , , , , , , , [-1]], + , + '441', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + BN: [ + , + [, , '[2-578]\\d{6}', , , , , , , [7]], + [, , '22[0-7]\\d{4}|(?:2[013-9]|[34]\\d|5[0-25-9])\\d{5}', , , , '2345678'], + [, , '(?:22[89]|[78]\\d\\d)\\d{4}', , , , '7123456'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '5[34]\\d{5}', , , , '5345678'], + 'BN', + 673, + '00', + , + , + , + , + , + , + , + [[, '(\\d{3})(\\d{4})', '$1 $2', ['[2-578]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + BO: [ + , + [, , '(?:[2-467]\\d\\d|8001)\\d{5}', , , , , , , [8, 9], [7]], + [ + , + , + '(?:2(?:2\\d\\d|5(?:11|[258]\\d|9[67])|6(?:12|2\\d|9[34])|8(?:2[34]|39|62))|3(?:3\\d\\d|4(?:6\\d|8[24])|8(?:25|42|5[257]|86|9[25])|9(?:[27]\\d|3[2-4]|4[248]|5[24]|6[2-6]))|4(?:4\\d\\d|6(?:11|[24689]\\d|72)))\\d{4}', + , + , + , + '22123456', + , + , + [8], + [7], + ], + [, , '[67]\\d{7}', , , , '71234567', , , [8]], + [, , '8001[07]\\d{4}', , , , '800171234', , , [9]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'BO', + 591, + '00(?:1\\d)?', + '0', + , + , + '0(1\\d)?', + , + , + , + [ + [, '(\\d)(\\d{7})', '$1 $2', ['[23]|4[46]'], , '0$CC $1'], + [, '(\\d{8})', '$1', ['[67]'], , '0$CC $1'], + [, '(\\d{3})(\\d{2})(\\d{4})', '$1 $2 $3', ['8'], , '0$CC $1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , '8001[07]\\d{4}', , , , , , , [9]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + BQ: [ + , + [, , '(?:[34]1|7\\d)\\d{5}', , , , , , , [7]], + [, , '(?:318[023]|41(?:6[023]|70)|7(?:1[578]|2[05]|50)\\d)\\d{3}', , , , '7151234'], + [ + , + , + '(?:31(?:8[14-8]|9[14578])|416[14-9]|7(?:0[01]|7[07]|8\\d|9[056])\\d)\\d{3}', + , + , + , + '3181234', + ], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'BQ', + 599, + '00', + , + , + , + , + , + , + , + , + , + [, , , , , , , , , [-1]], + , + '[347]', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + BR: [ + , + [ + , + , + '(?:[1-46-9]\\d\\d|5(?:[0-46-9]\\d|5[0-24679]))\\d{8}|[1-9]\\d{9}|[3589]\\d{8}|[34]\\d{7}', + , + , + , + , + , + , + [8, 9, 10, 11], + ], + [ + , + , + '(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-5]\\d{7}', + , + , + , + '1123456789', + , + , + [10], + [8], + ], + [ + , + , + '(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])(?:7|9\\d)\\d{7}', + , + , + , + '11961234567', + , + , + [10, 11], + [8, 9], + ], + [, , '800\\d{6,7}', , , , '800123456', , , [9, 10]], + [, , '300\\d{6}|[59]00\\d{6,7}', , , , '300123456', , , [9, 10]], + [, , '300\\d{7}|[34]00\\d{5}|4(?:02|37)0\\d{4}', , , , '40041234', , , [8, 10]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'BR', + 55, + '00(?:1[245]|2[1-35]|31|4[13]|[56]5|99)', + '0', + , + , + '(?:0|90)(?:(1[245]|2[1-35]|31|4[13]|[56]5|99)(\\d{10,11}))?', + '$2', + , + , + [ + [ + , + '(\\d{3,6})', + '$1', + ['1(?:1[25-8]|2[357-9]|3[02-68]|4[12568]|5|6[0-8]|8[015]|9[0-47-9])|321|610'], + ], + [, '(\\d{4})(\\d{4})', '$1-$2', ['300|4(?:0[02]|37)', '4(?:02|37)0|[34]00']], + [, '(\\d{4})(\\d{4})', '$1-$2', ['[2-57]', '[2357]|4(?:[0-24-9]|3(?:[0-689]|7[1-9]))']], + [, '(\\d{3})(\\d{2,3})(\\d{4})', '$1 $2 $3', ['(?:[358]|90)0'], '0$1'], + [, '(\\d{5})(\\d{4})', '$1-$2', ['9']], + [ + , + '(\\d{2})(\\d{4})(\\d{4})', + '$1 $2-$3', + ['(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-57]'], + '($1)', + '0 $CC ($1)', + ], + [ + , + '(\\d{2})(\\d{5})(\\d{4})', + '$1 $2-$3', + ['[16][1-9]|[2-57-9]'], + '($1)', + '0 $CC ($1)', + ], + ], + [ + [, '(\\d{4})(\\d{4})', '$1-$2', ['300|4(?:0[02]|37)', '4(?:02|37)0|[34]00']], + [, '(\\d{3})(\\d{2,3})(\\d{4})', '$1 $2 $3', ['(?:[358]|90)0'], '0$1'], + [ + , + '(\\d{2})(\\d{4})(\\d{4})', + '$1 $2-$3', + ['(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-57]'], + '($1)', + '0 $CC ($1)', + ], + [ + , + '(\\d{2})(\\d{5})(\\d{4})', + '$1 $2-$3', + ['[16][1-9]|[2-57-9]'], + '($1)', + '0 $CC ($1)', + ], + ], + [, , , , , , , , , [-1]], + , + , + [, , '4020\\d{4}|[34]00\\d{5}', , , , , , , [8]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + BS: [ + , + [, , '(?:242|[58]\\d\\d|900)\\d{7}', , , , , , , [10], [7]], + [ + , + , + '242(?:3(?:02|[236][1-9]|4[0-24-9]|5[0-68]|7[347]|8[0-4]|9[2-467])|461|502|6(?:0[1-4]|12|2[013]|[45]0|7[67]|8[78]|9[89])|7(?:02|88))\\d{4}', + , + , + , + '2423456789', + , + , + , + [7], + ], + [ + , + , + '242(?:3(?:5[79]|7[56]|95)|4(?:[23][1-9]|4[1-35-9]|5[1-8]|6[2-8]|7\\d|81)|5(?:2[45]|3[35]|44|5[1-46-9]|65|77)|6[34]6|7(?:27|38)|8(?:0[1-9]|1[02-9]|2\\d|[89]9))\\d{4}', + , + , + , + '2423591234', + , + , + , + [7], + ], + [, , '242300\\d{4}|8(?:00|33|44|55|66|77|88)[2-9]\\d{6}', , , , '8002123456', , , , [7]], + [, , '900[2-9]\\d{6}', , , , '9002123456'], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[12]|33|44|66|77|88)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , , , , , , , , [-1]], + 'BS', + 1, + '011', + '1', + , + , + '1|([3-8]\\d{6})$', + '242$1', + , + , + , + , + [, , , , , , , , , [-1]], + , + '242', + [, , , , , , , , , [-1]], + [, , '242225\\d{4}', , , , '2422250123'], + , + , + [, , , , , , , , , [-1]], + ], + BT: [ + , + [, , '[17]\\d{7}|[2-8]\\d{6}', , , , , , , [7, 8], [6]], + [ + , + , + '(?:2[3-6]|[34][5-7]|5[236]|6[2-46]|7[246]|8[2-4])\\d{5}', + , + , + , + '2345678', + , + , + [7], + [6], + ], + [, , '(?:1[67]|77)\\d{6}', , , , '17123456', , , [8]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'BT', + 975, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{3})(\\d{3})', '$1 $2', ['[2-7]']], + [, '(\\d)(\\d{3})(\\d{3})', '$1 $2 $3', ['[2-68]|7[246]']], + [, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['1[67]|7']], + ], + [ + [, '(\\d)(\\d{3})(\\d{3})', '$1 $2 $3', ['[2-68]|7[246]']], + [, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['1[67]|7']], + ], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + BW: [ + , + [, , '(?:0800|(?:[37]|800)\\d)\\d{6}|(?:[2-6]\\d|90)\\d{5}', , , , , , , [7, 8, 10]], + [ + , + , + '(?:2(?:4[0-48]|6[0-24]|9[0578])|3(?:1[0-35-9]|55|[69]\\d|7[013])|4(?:6[03]|7[1267]|9[0-5])|5(?:3[03489]|4[0489]|7[1-47]|88|9[0-49])|6(?:2[1-35]|5[149]|8[067]))\\d{4}', + , + , + , + '2401234', + , + , + [7], + ], + [, , '(?:321|7(?:[1-7]\\d|8[01]))\\d{5}', , , , '71123456', , , [8]], + [, , '(?:0800|800\\d)\\d{6}', , , , '0800012345', , , [10]], + [, , '90\\d{5}', , , , '9012345', , , [7]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '79(?:1(?:[01]\\d|20)|2[0-25-7]\\d)\\d{3}', , , , '79101234', , , [8]], + 'BW', + 267, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{2})(\\d{5})', '$1 $2', ['90']], + [, '(\\d{3})(\\d{4})', '$1 $2', ['[24-6]|3[15-79]']], + [, '(\\d{2})(\\d{3})(\\d{3})', '$1 $2 $3', ['[37]']], + [, '(\\d{4})(\\d{3})(\\d{3})', '$1 $2 $3', ['0']], + [, '(\\d{3})(\\d{4})(\\d{3})', '$1 $2 $3', ['8']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + BY: [ + , + [ + , + , + '(?:[12]\\d|33|44|902)\\d{7}|8(?:0[0-79]\\d{5,7}|[1-7]\\d{9})|8(?:1[0-489]|[5-79]\\d)\\d{7}|8[1-79]\\d{6,7}|8[0-79]\\d{5}|8\\d{5}', + , + , + , + , + , + , + [6, 7, 8, 9, 10, 11], + [5], + ], + [ + , + , + '(?:1(?:5(?:1[1-5]|[24]\\d|6[2-4]|9[1-7])|6(?:[235]\\d|4[1-7])|7\\d\\d)|2(?:1(?:[246]\\d|3[0-35-9]|5[1-9])|2(?:[235]\\d|4[0-8])|3(?:[26]\\d|3[02-79]|4[024-7]|5[03-7])))\\d{5}', + , + , + , + '152450911', + , + , + [9], + [5, 6, 7], + ], + [, , '(?:2(?:5[5-79]|9[1-9])|(?:33|44)\\d)\\d{6}', , , , '294911911', , , [9]], + [, , '800\\d{3,7}|8(?:0[13]|20\\d)\\d{7}', , , , '8011234567'], + [, , '(?:810|902)\\d{7}', , , , '9021234567', , , [10]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '249\\d{6}', , , , '249123456', , , [9]], + 'BY', + 375, + '810', + '8', + , + , + '0|80?', + , + '8~10', + , + [ + [, '(\\d{3})(\\d{3})', '$1 $2', ['800'], '8 $1'], + [, '(\\d{3})(\\d{2})(\\d{2,4})', '$1 $2 $3', ['800'], '8 $1'], + [ + , + '(\\d{4})(\\d{2})(\\d{3})', + '$1 $2-$3', + [ + '1(?:5[169]|6[3-5]|7[179])|2(?:1[35]|2[34]|3[3-5])', + '1(?:5[169]|6(?:3[1-3]|4|5[125])|7(?:1[3-9]|7[0-24-6]|9[2-7]))|2(?:1[35]|2[34]|3[3-5])', + ], + '8 0$1', + ], + [ + , + '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', + '$1 $2-$3-$4', + ['1(?:[56]|7[467])|2[1-3]'], + '8 0$1', + ], + [, '(\\d{2})(\\d{3})(\\d{2})(\\d{2})', '$1 $2-$3-$4', ['[1-4]'], '8 0$1'], + [, '(\\d{3})(\\d{3,4})(\\d{4})', '$1 $2 $3', ['[89]'], '8 $1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , '800\\d{3,7}|(?:8(?:0[13]|10|20\\d)|902)\\d{7}'], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + BZ: [ + , + [, , '(?:0800\\d|[2-8])\\d{6}', , , , , , , [7, 11]], + [ + , + , + '(?:2(?:[02]\\d|36|[68]0)|[3-58](?:[02]\\d|[68]0)|7(?:[02]\\d|32|[68]0))\\d{4}', + , + , + , + '2221234', + , + , + [7], + ], + [, , '6[0-35-7]\\d{5}', , , , '6221234', , , [7]], + [, , '0800\\d{7}', , , , '08001234123', , , [11]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'BZ', + 501, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{3})(\\d{4})', '$1-$2', ['[2-8]']], + [, '(\\d)(\\d{3})(\\d{4})(\\d{3})', '$1-$2-$3-$4', ['0']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + CA: [ + , + [, , '(?:[2-8]\\d|90)\\d{8}', , , , , , , [10], [7]], + [ + , + , + '(?:2(?:04|[23]6|[48]9|50)|3(?:06|43|6[578])|4(?:03|1[68]|3[178]|50|74)|5(?:06|1[49]|48|79|8[17])|6(?:04|13|39|47|72)|7(?:0[59]|78|8[02])|8(?:[06]7|19|25|73)|90[25])[2-9]\\d{6}', + , + , + , + '5062345678', + , + , + , + [7], + ], + [ + , + , + '(?:2(?:04|[23]6|[48]9|50)|3(?:06|43|6[578])|4(?:03|1[68]|3[178]|50|74)|5(?:06|1[49]|48|79|8[17])|6(?:04|13|39|47|72)|7(?:0[59]|78|8[02])|8(?:[06]7|19|25|73)|90[25])[2-9]\\d{6}', + , + , + , + '5062345678', + , + , + , + [7], + ], + [, , '8(?:00|33|44|55|66|77|88)[2-9]\\d{6}', , , , '8002123456'], + [, , '900[2-9]\\d{6}', , , , '9002123456'], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|(?:5(?:00|2[12]|33|44|66|77|88)|622)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , '600[2-9]\\d{6}', , , , '6002012345'], + 'CA', + 1, + '011', + '1', + , + , + '1', + , + , + 1, + , + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + CC: [ + , + [ + , + , + '1(?:[0-79]\\d{8}(?:\\d{2})?|8[0-24-9]\\d{7})|[148]\\d{8}|1\\d{5,7}', + , + , + , + , + , + , + [6, 7, 8, 9, 10, 12], + ], + [ + , + , + '8(?:51(?:0(?:02|31|60|89)|1(?:18|76)|223)|91(?:0(?:1[0-2]|29)|1(?:[28]2|50|79)|2(?:10|64)|3(?:[06]8|22)|4[29]8|62\\d|70[23]|959))\\d{3}', + , + , + , + '891621234', + , + , + [9], + [8], + ], + [ + , + , + '4(?:83[0-38]|93[0-6])\\d{5}|4(?:[0-3]\\d|4[047-9]|5[0-25-9]|6[06-9]|7[02-9]|8[0-24-9]|9[0-27-9])\\d{6}', + , + , + , + '412345678', + , + , + [9], + ], + [, , '180(?:0\\d{3}|2)\\d{3}', , , , '1800123456', , , [7, 10]], + [, , '190[0-26]\\d{6}', , , , '1900123456', , , [10]], + [ + , + , + '13(?:00\\d{6}(?:\\d{2})?|45[0-4]\\d{3})|13\\d{4}', + , + , + , + '1300123456', + , + , + [6, 8, 10, 12], + ], + [, , , , , , , , , [-1]], + [, , '14(?:5(?:1[0458]|[23][458])|71\\d)\\d{4}', , , , '147101234', , , [9]], + 'CC', + 61, + '001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011', + '0', + , + , + '0|([59]\\d{7})$', + '8$1', + '0011', + , + , + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + CD: [ + , + [, , '[189]\\d{8}|[1-68]\\d{6}', , , , , , , [7, 9]], + [, , '12\\d{7}|[1-6]\\d{6}', , , , '1234567'], + [, , '88\\d{5}|(?:8[0-59]|9[017-9])\\d{7}', , , , '991234567'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'CD', + 243, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{2})(\\d{2})(\\d{3})', '$1 $2 $3', ['88'], '0$1'], + [, '(\\d{2})(\\d{5})', '$1 $2', ['[1-6]'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['1'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['[89]'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + CF: [ + , + [, , '(?:[27]\\d{3}|8776)\\d{4}', , , , , , , [8]], + [, , '2[12]\\d{6}', , , , '21612345'], + [, , '7[0257]\\d{6}', , , , '70012345'], + [, , , , , , , , , [-1]], + [, , '8776\\d{4}', , , , '87761234'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'CF', + 236, + '00', + , + , + , + , + , + , + , + [[, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[278]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + CG: [ + , + [, , '222\\d{6}|(?:0\\d|80)\\d{7}', , , , , , , [9]], + [, , '222[1-589]\\d{5}', , , , '222123456'], + [ + , + , + '026(?:1[0-5]|6[6-9])\\d{4}|0(?:[14-6]\\d\\d|2(?:40|5[5-8]|6[07-9]))\\d{5}', + , + , + , + '061234567', + ], + [, , , , , , , , , [-1]], + [, , '80(?:0\\d\\d|120)\\d{4}', , , , '800123456'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'CG', + 242, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d)(\\d{4})(\\d{4})', '$1 $2 $3', ['8']], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['[02]']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + CH: [ + , + [, , '8\\d{11}|[2-9]\\d{8}', , , , , , , [9, 12]], + [, , '(?:2[12467]|3[1-4]|4[134]|5[256]|6[12]|[7-9]1)\\d{7}', , , , '212345678', , , [9]], + [, , '7[35-9]\\d{7}', , , , '781234567', , , [9]], + [, , '800\\d{6}', , , , '800123456', , , [9]], + [, , '90[016]\\d{6}', , , , '900123456', , , [9]], + [, , '84[0248]\\d{6}', , , , '840123456', , , [9]], + [, , '878\\d{6}', , , , '878123456', , , [9]], + [, , , , , , , , , [-1]], + 'CH', + 41, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['8[047]|90'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[2-79]|81'], '0$1'], + [, '(\\d{3})(\\d{2})(\\d{3})(\\d{2})(\\d{2})', '$1 $2 $3 $4 $5', ['8'], '0$1'], + ], + , + [, , '74[0248]\\d{6}', , , , '740123456', , , [9]], + , + , + [, , , , , , , , , [-1]], + [, , '5[18]\\d{7}', , , , '581234567', , , [9]], + , + , + [, , '860\\d{9}', , , , '860123456789', , , [12]], + ], + CI: [ + , + [, , '[02]\\d{9}', , , , , , , [10]], + [ + , + , + '2(?:[15]\\d{3}|7(?:2(?:0[23]|1[2357]|[23][45]|4[3-5])|3(?:06|1[69]|[2-6]7)))\\d{5}', + , + , + , + '2123456789', + ], + [ + , + , + '0704[0-7]\\d{5}|0(?:[15]\\d\\d|7(?:0[0-37-9]|[4-9][7-9]))\\d{6}', + , + , + , + '0123456789', + ], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'CI', + 225, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{2})(\\d{2})(\\d)(\\d{5})', '$1 $2 $3 $4', ['2']], + [, '(\\d{2})(\\d{2})(\\d{2})(\\d{4})', '$1 $2 $3 $4', ['0']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + CK: [ + , + [, , '[2-578]\\d{4}', , , , , , , [5]], + [, , '(?:2\\d|3[13-7]|4[1-5])\\d{3}', , , , '21234'], + [, , '[578]\\d{4}', , , , '71234'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'CK', + 682, + '00', + , + , + , + , + , + , + , + [[, '(\\d{2})(\\d{3})', '$1 $2', ['[2-578]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + CL: [ + , + [, , '12300\\d{6}|6\\d{9,10}|[2-9]\\d{8}', , , , , , , [9, 10, 11]], + [ + , + , + '2(?:1982[0-6]|3314[05-9])\\d{3}|(?:2(?:1(?:160|962)|3(?:2\\d\\d|3(?:[034]\\d|1[0-35-9]|2[1-9]|5[0-2])|600))|80[1-9]\\d\\d|9(?:3(?:[0-57-9]\\d\\d|6(?:0[02-9]|[1-9]\\d))|6(?:[0-8]\\d\\d|9(?:[02-79]\\d|1[05-9]))|7[1-9]\\d\\d|9(?:[03-9]\\d\\d|1(?:[0235-9]\\d|4[0-24-9])|2(?:[0-79]\\d|8[0-46-9]))))\\d{4}|(?:22|3[2-5]|[47][1-35]|5[1-3578]|6[13-57]|8[1-9]|9[2458])\\d{7}', + , + , + , + '221234567', + , + , + [9], + ], + [ + , + , + '2(?:1982[0-6]|3314[05-9])\\d{3}|(?:2(?:1(?:160|962)|3(?:2\\d\\d|3(?:[034]\\d|1[0-35-9]|2[1-9]|5[0-2])|600))|80[1-9]\\d\\d|9(?:3(?:[0-57-9]\\d\\d|6(?:0[02-9]|[1-9]\\d))|6(?:[0-8]\\d\\d|9(?:[02-79]\\d|1[05-9]))|7[1-9]\\d\\d|9(?:[03-9]\\d\\d|1(?:[0235-9]\\d|4[0-24-9])|2(?:[0-79]\\d|8[0-46-9]))))\\d{4}|(?:22|3[2-5]|[47][1-35]|5[1-3578]|6[13-57]|8[1-9]|9[2458])\\d{7}', + , + , + , + '221234567', + , + , + [9], + ], + [, , '(?:123|8)00\\d{6}', , , , '800123456', , , [9, 11]], + [, , , , , , , , , [-1]], + [, , '600\\d{7,8}', , , , '6001234567', , , [10, 11]], + [, , , , , , , , , [-1]], + [, , '44\\d{7}', , , , '441234567', , , [9]], + 'CL', + 56, + '(?:0|1(?:1[0-69]|2[02-5]|5[13-58]|69|7[0167]|8[018]))0', + , + , + , + , + , + , + 1, + [ + [, '(\\d{4})', '$1', ['1(?:[03-589]|21)|[29]0|78']], + [, '(\\d{5})(\\d{4})', '$1 $2', ['219', '2196'], '($1)'], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['44']], + [, '(\\d)(\\d{4})(\\d{4})', '$1 $2 $3', ['2[1-3]'], '($1)'], + [, '(\\d)(\\d{4})(\\d{4})', '$1 $2 $3', ['9[2-9]']], + [ + , + '(\\d{2})(\\d{3})(\\d{4})', + '$1 $2 $3', + ['3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-9]|[1-9])'], + '($1)', + ], + [, '(\\d{3})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['60|8']], + [, '(\\d{4})(\\d{3})(\\d{4})', '$1 $2 $3', ['1']], + [, '(\\d{3})(\\d{3})(\\d{2})(\\d{3})', '$1 $2 $3 $4', ['60']], + ], + [ + [, '(\\d{5})(\\d{4})', '$1 $2', ['219', '2196'], '($1)'], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['44']], + [, '(\\d)(\\d{4})(\\d{4})', '$1 $2 $3', ['2[1-3]'], '($1)'], + [, '(\\d)(\\d{4})(\\d{4})', '$1 $2 $3', ['9[2-9]']], + [ + , + '(\\d{2})(\\d{3})(\\d{4})', + '$1 $2 $3', + ['3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-9]|[1-9])'], + '($1)', + ], + [, '(\\d{3})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['60|8']], + [, '(\\d{4})(\\d{3})(\\d{4})', '$1 $2 $3', ['1']], + [, '(\\d{3})(\\d{3})(\\d{2})(\\d{3})', '$1 $2 $3 $4', ['60']], + ], + [, , , , , , , , , [-1]], + , + , + [, , '600\\d{7,8}', , , , , , , [10, 11]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + CM: [ + , + [, , '[26]\\d{8}|88\\d{6,7}', , , , , , , [8, 9]], + [, , '2(?:22|33)\\d{6}', , , , '222123456', , , [9]], + [, , '(?:24[23]|6[5-9]\\d)\\d{6}', , , , '671234567', , , [9]], + [, , '88\\d{6,7}', , , , '88012345'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'CM', + 237, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['88']], + [, '(\\d)(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4 $5', ['[26]|88']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + CN: [ + , + [ + , + , + '1[127]\\d{8,9}|2\\d{9}(?:\\d{2})?|[12]\\d{6,7}|86\\d{6}|(?:1[03-689]\\d|6)\\d{7,9}|(?:[3-579]\\d|8[0-57-9])\\d{6,9}', + , + , + , + , + , + , + [7, 8, 9, 10, 11, 12], + [5, 6], + ], + [ + , + , + '(?:10(?:[02-79]\\d\\d|[18](?:0[1-9]|[1-9]\\d))|21(?:[18](?:0[1-9]|[1-9]\\d)|[2-79]\\d\\d))\\d{5}|(?:43[35]|754)\\d{7,8}|8(?:078\\d{7}|51\\d{7,8})|(?:10|(?:2|85)1|43[35]|754)(?:100\\d\\d|95\\d{3,4})|(?:2[02-57-9]|3(?:11|7[179])|4(?:[15]1|3[12])|5(?:1\\d|2[37]|3[12]|51|7[13-79]|9[15])|7(?:[39]1|5[57]|6[09])|8(?:71|98))(?:[02-8]\\d{7}|1(?:0(?:0\\d\\d(?:\\d{3})?|[1-9]\\d{5})|[1-9]\\d{6})|9(?:[0-46-9]\\d{6}|5\\d{3}(?:\\d(?:\\d{2})?)?))|(?:3(?:1[02-9]|35|49|5\\d|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|3[46-9]|5[2-9]|6[47-9]|7\\d|8[23])|5(?:3[03-9]|4[36]|5[02-9]|6[1-46]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[17]\\d|2[248]|3[04-9]|4[3-6]|5[0-3689]|6[2368]|9[02-9])|8(?:1[236-8]|2[5-7]|3\\d|5[2-9]|7[02-9]|8[36-8]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))(?:[02-8]\\d{6}|1(?:0(?:0\\d\\d(?:\\d{2})?|[1-9]\\d{4})|[1-9]\\d{5})|9(?:[0-46-9]\\d{5}|5\\d{3,5}))', + , + , + , + '1012345678', + , + , + [7, 8, 9, 10, 11], + [5, 6], + ], + [ + , + , + '1740[0-5]\\d{6}|1(?:[38]\\d|4[57]|5[0-35-9]|6[25-7]|7[0-35-8]|9[0135-9])\\d{8}', + , + , + , + '13123456789', + , + , + [11], + ], + [, , '(?:(?:10|21)8|8)00\\d{7}', , , , '8001234567', , , [10, 12]], + [, , '16[08]\\d{5}', , , , '16812345', , , [8]], + [ + , + , + '400\\d{7}|950\\d{7,8}|(?:10|2[0-57-9]|3(?:[157]\\d|35|49|9[1-68])|4(?:[17]\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))96\\d{3,4}', + , + , + , + '4001234567', + , + , + [7, 8, 9, 10, 11], + [5, 6], + ], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'CN', + 86, + '00|1(?:[12]\\d|79)\\d\\d00', + '0', + , + , + '0|(1(?:[12]\\d|79)\\d\\d)', + , + '00', + , + [ + [, '(\\d{5,6})', '$1', ['96']], + [ + , + '(\\d{2})(\\d{5,6})', + '$1 $2', + [ + '(?:10|2[0-57-9])[19]', + '(?:10|2[0-57-9])(?:10|9[56])', + '(?:10|2[0-57-9])(?:100|9[56])', + ], + '0$1', + '$CC $1', + ], + [ + , + '(\\d{3})(\\d{4})', + '$1 $2', + [ + '[1-9]', + '1[1-9]|26|[3-9]|(?:10|2[0-57-9])(?:[0-8]|9[0-47-9])', + '1[1-9]|26|[3-9]|(?:10|2[0-57-9])(?:[02-8]|1(?:0[1-9]|[1-9])|9[0-47-9])', + ], + ], + [, '(\\d{4})(\\d{4})', '$1 $2', ['16[08]']], + [ + , + '(\\d{3})(\\d{5,6})', + '$1 $2', + [ + '3(?:[157]|35|49|9[1-68])|4(?:[17]|2[179]|6[47-9]|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])|(?:4[35]|59|85)[1-9]', + '(?:3(?:[157]\\d|35|49|9[1-68])|4(?:[17]\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))[19]', + '85[23](?:10|95)|(?:3(?:[157]\\d|35|49|9[1-68])|4(?:[17]\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))(?:10|9[56])', + '85[23](?:100|95)|(?:3(?:[157]\\d|35|49|9[1-68])|4(?:[17]\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))(?:100|9[56])', + ], + '0$1', + '$CC $1', + ], + [ + , + '(\\d{4})(\\d{4})', + '$1 $2', + [ + '[1-9]', + '1[1-9]|26|[3-9]|(?:10|2[0-57-9])(?:[0-8]|9[0-47-9])', + '26|3(?:[0268]|9[079])|4(?:[049]|2[02-68]|[35]0|6[0-356]|8[014-9])|5(?:0|2[0-24-689]|4[0-2457-9]|6[057-9]|90)|6(?:[0-24578]|6[14-79]|9[03-9])|7(?:0[02-9]|2[0135-79]|3[23]|4[0-27-9]|6[1457]|8)|8(?:[046]|1[01459]|2[0-489]|50|8[0-2459]|9[09])|9(?:0[0457]|1[08]|[268]|4[024-9])|(?:34|85[23])[0-8]|(?:1|58)[1-9]|(?:63|95)[06-9]|(?:33|85[23]9)[0-46-9]|(?:10|2[0-57-9]|3(?:[157]\\d|35|49|9[1-68])|4(?:[17]\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))(?:[0-8]|9[0-47-9])', + '26|3(?:[0268]|3[0-46-9]|4[0-8]|9[079])|4(?:[049]|2[02-68]|[35]0|6[0-356]|8[014-9])|5(?:0|2[0-24-689]|4[0-2457-9]|6[057-9]|90)|6(?:[0-24578]|3[06-9]|6[14-79]|9[03-9])|7(?:0[02-9]|2[0135-79]|3[23]|4[0-27-9]|6[1457]|8)|8(?:[046]|1[01459]|2[0-489]|5(?:0|[23](?:[02-8]|1[1-9]|9[0-46-9]))|8[0-2459]|9[09])|9(?:0[0457]|1[08]|[268]|4[024-9]|5[06-9])|(?:1|58|85[23]10)[1-9]|(?:10|2[0-57-9])(?:[0-8]|9[0-47-9])|(?:3(?:[157]\\d|35|49|9[1-68])|4(?:[17]\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))(?:[02-8]|1(?:0[1-9]|[1-9])|9[0-47-9])', + ], + ], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['(?:4|80)0']], + [ + , + '(\\d{2})(\\d{4})(\\d{4})', + '$1 $2 $3', + [ + '10|2(?:[02-57-9]|1[1-9])', + '10|2(?:[02-57-9]|1[1-9])', + '10[0-79]|2(?:[02-57-9]|1[1-79])|(?:10|21)8(?:0[1-9]|[1-9])', + ], + '0$1', + '$CC $1', + 1, + ], + [ + , + '(\\d{3})(\\d{3})(\\d{4})', + '$1 $2 $3', + [ + '3(?:[3-59]|7[02-68])|4(?:[26-8]|3[3-9]|5[2-9])|5(?:3[03-9]|[468]|7[028]|9[2-46-9])|6|7(?:[0-247]|3[04-9]|5[0-4689]|6[2368])|8(?:[1-358]|9[1-7])|9(?:[013479]|5[1-5])|(?:[34]1|55|79|87)[02-9]', + ], + '0$1', + '$CC $1', + 1, + ], + [, '(\\d{3})(\\d{7,8})', '$1 $2', ['9']], + [, '(\\d{4})(\\d{3})(\\d{4})', '$1 $2 $3', ['80'], '0$1', '$CC $1', 1], + [, '(\\d{3})(\\d{4})(\\d{4})', '$1 $2 $3', ['[3-578]'], '0$1', '$CC $1', 1], + [, '(\\d{3})(\\d{4})(\\d{4})', '$1 $2 $3', ['1[3-9]'], , '$CC $1'], + [, '(\\d{2})(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3 $4', ['[12]'], '0$1', , 1], + ], + [ + [ + , + '(\\d{2})(\\d{5,6})', + '$1 $2', + [ + '(?:10|2[0-57-9])[19]', + '(?:10|2[0-57-9])(?:10|9[56])', + '(?:10|2[0-57-9])(?:100|9[56])', + ], + '0$1', + '$CC $1', + ], + [ + , + '(\\d{3})(\\d{5,6})', + '$1 $2', + [ + '3(?:[157]|35|49|9[1-68])|4(?:[17]|2[179]|6[47-9]|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])|(?:4[35]|59|85)[1-9]', + '(?:3(?:[157]\\d|35|49|9[1-68])|4(?:[17]\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))[19]', + '85[23](?:10|95)|(?:3(?:[157]\\d|35|49|9[1-68])|4(?:[17]\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))(?:10|9[56])', + '85[23](?:100|95)|(?:3(?:[157]\\d|35|49|9[1-68])|4(?:[17]\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))(?:100|9[56])', + ], + '0$1', + '$CC $1', + ], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['(?:4|80)0']], + [ + , + '(\\d{2})(\\d{4})(\\d{4})', + '$1 $2 $3', + [ + '10|2(?:[02-57-9]|1[1-9])', + '10|2(?:[02-57-9]|1[1-9])', + '10[0-79]|2(?:[02-57-9]|1[1-79])|(?:10|21)8(?:0[1-9]|[1-9])', + ], + '0$1', + '$CC $1', + 1, + ], + [ + , + '(\\d{3})(\\d{3})(\\d{4})', + '$1 $2 $3', + [ + '3(?:[3-59]|7[02-68])|4(?:[26-8]|3[3-9]|5[2-9])|5(?:3[03-9]|[468]|7[028]|9[2-46-9])|6|7(?:[0-247]|3[04-9]|5[0-4689]|6[2368])|8(?:[1-358]|9[1-7])|9(?:[013479]|5[1-5])|(?:[34]1|55|79|87)[02-9]', + ], + '0$1', + '$CC $1', + 1, + ], + [, '(\\d{3})(\\d{7,8})', '$1 $2', ['9']], + [, '(\\d{4})(\\d{3})(\\d{4})', '$1 $2 $3', ['80'], '0$1', '$CC $1', 1], + [, '(\\d{3})(\\d{4})(\\d{4})', '$1 $2 $3', ['[3-578]'], '0$1', '$CC $1', 1], + [, '(\\d{3})(\\d{4})(\\d{4})', '$1 $2 $3', ['1[3-9]'], , '$CC $1'], + [, '(\\d{2})(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3 $4', ['[12]'], '0$1', , 1], + ], + [, , , , , , , , , [-1]], + , + , + [, , '(?:(?:10|21)8|[48])00\\d{7}|950\\d{7,8}', , , , , , , [10, 11, 12]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + CO: [ + , + [, , '(?:(?:1\\d|[36])\\d{3}|9101)\\d{6}|[124-8]\\d{7}', , , , , , , [8, 10, 11], [7]], + [, , '60[124-8][2-9]\\d{6}|[124-8][2-9]\\d{6}', , , , '12345678', , , [8, 10], [7]], + [ + , + , + '3333(?:0(?:0\\d|1[0-5])|[4-9]\\d\\d)\\d{3}|(?:3(?:24[1-9]|3(?:00|3[0-24-9]))|9101)\\d{6}|3(?:0[0-5]|1\\d|2[0-3]|5[01]|70)\\d{7}', + , + , + , + '3211234567', + , + , + [10], + ], + [, , '1800\\d{7}', , , , '18001234567', , , [11]], + [, , '19(?:0[01]|4[78])\\d{7}', , , , '19001234567', , , [11]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'CO', + 57, + '00(?:4(?:[14]4|56)|[579])', + '0', + , + , + '0([3579]|4(?:[14]4|56))?', + , + , + , + [ + [, '(\\d)(\\d{7})', '$1 $2', ['[146][2-9]|[2578]'], '($1)', '0$CC $1'], + [, '(\\d{3})(\\d{7})', '$1 $2', ['6'], '($1)'], + [, '(\\d{3})(\\d{7})', '$1 $2', ['[39]'], , '0$CC $1'], + [, '(\\d)(\\d{3})(\\d{7})', '$1-$2-$3', ['1'], '0$1'], + ], + [ + [, '(\\d)(\\d{7})', '$1 $2', ['[146][2-9]|[2578]'], '($1)', '0$CC $1'], + [, '(\\d{3})(\\d{7})', '$1 $2', ['6'], '($1)'], + [, '(\\d{3})(\\d{7})', '$1 $2', ['[39]'], , '0$CC $1'], + [, '(\\d)(\\d{3})(\\d{7})', '$1 $2 $3', ['1']], + ], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + CR: [ + , + [, , '(?:8\\d|90)\\d{8}|(?:[24-8]\\d{3}|3005)\\d{4}', , , , , , , [8, 10]], + [, , '210[7-9]\\d{4}|2(?:[024-7]\\d|1[1-9])\\d{5}', , , , '22123456', , , [8]], + [ + , + , + '(?:3005\\d|6500[01])\\d{3}|(?:5[07]|6[0-4]|7[0-3]|8[3-9])\\d{6}', + , + , + , + '83123456', + , + , + [8], + ], + [, , '800\\d{7}', , , , '8001234567', , , [10]], + [, , '90[059]\\d{7}', , , , '9001234567', , , [10]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '(?:210[0-6]|4\\d{3}|5100)\\d{4}', , , , '40001234', , , [8]], + 'CR', + 506, + '00', + , + , + , + '(19(?:0[0-2468]|1[09]|20|66|77|99))', + , + , + , + [ + [, '(\\d{4})(\\d{4})', '$1 $2', ['[2-7]|8[3-9]'], , '$CC $1'], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1-$2-$3', ['[89]'], , '$CC $1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + CU: [ + , + [, , '[27]\\d{6,7}|[34]\\d{5,7}|(?:5|8\\d\\d)\\d{7}', , , , , , , [6, 7, 8, 10], [4, 5]], + [ + , + , + '(?:3[23]|48)\\d{4,6}|(?:31|4[36]|8(?:0[25]|78)\\d)\\d{6}|(?:2[1-4]|4[1257]|7\\d)\\d{5,6}', + , + , + , + '71234567', + , + , + , + [4, 5], + ], + [, , '5\\d{7}', , , , '51234567', , , [8]], + [, , '800\\d{7}', , , , '8001234567', , , [10]], + [, , , , , , , , , [-1]], + [, , '807\\d{7}', , , , '8071234567', , , [10]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'CU', + 53, + '119', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{2})(\\d{4,6})', '$1 $2', ['2[1-4]|[34]'], '(0$1)'], + [, '(\\d)(\\d{6,7})', '$1 $2', ['7'], '(0$1)'], + [, '(\\d)(\\d{7})', '$1 $2', ['5'], '0$1'], + [, '(\\d{3})(\\d{7})', '$1 $2', ['8'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + CV: [ + , + [, , '(?:[2-59]\\d\\d|800)\\d{4}', , , , , , , [7]], + [, , '2(?:2[1-7]|3[0-8]|4[12]|5[1256]|6\\d|7[1-3]|8[1-5])\\d{4}', , , , '2211234'], + [, , '(?:[34][36]|5[1-389]|9\\d)\\d{5}', , , , '9911234'], + [, , '800\\d{4}', , , , '8001234'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'CV', + 238, + '0', + , + , + , + , + , + , + , + [[, '(\\d{3})(\\d{2})(\\d{2})', '$1 $2 $3', ['[2-589]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + CW: [ + , + [, , '(?:[34]1|60|(?:7|9\\d)\\d)\\d{5}', , , , , , , [7, 8]], + [ + , + , + '9(?:4(?:3[0-5]|4[14]|6\\d)|50\\d|7(?:2[014]|3[02-9]|4[4-9]|6[357]|77|8[7-9])|8(?:3[39]|[46]\\d|7[01]|8[57-9]))\\d{4}', + , + , + , + '94351234', + ], + [, , '953[01]\\d{4}|9(?:5[12467]|6[5-9])\\d{5}', , , , '95181234'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '60[0-2]\\d{4}', , , , '6001234', , , [7]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'CW', + 599, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{3})(\\d{4})', '$1 $2', ['[3467]']], + [, '(\\d)(\\d{3})(\\d{4})', '$1 $2 $3', ['9[4-8]']], + ], + , + [, , '955\\d{5}', , , , '95581234', , , [8]], + 1, + '[69]', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + CX: [ + , + [ + , + , + '1(?:[0-79]\\d{8}(?:\\d{2})?|8[0-24-9]\\d{7})|[148]\\d{8}|1\\d{5,7}', + , + , + , + , + , + , + [6, 7, 8, 9, 10, 12], + ], + [ + , + , + '8(?:51(?:0(?:01|30|59|88)|1(?:17|46|75)|2(?:22|35))|91(?:00[6-9]|1(?:[28]1|49|78)|2(?:09|63)|3(?:12|26|75)|4(?:56|97)|64\\d|7(?:0[01]|1[0-2])|958))\\d{3}', + , + , + , + '891641234', + , + , + [9], + [8], + ], + [ + , + , + '4(?:83[0-38]|93[0-6])\\d{5}|4(?:[0-3]\\d|4[047-9]|5[0-25-9]|6[06-9]|7[02-9]|8[0-24-9]|9[0-27-9])\\d{6}', + , + , + , + '412345678', + , + , + [9], + ], + [, , '180(?:0\\d{3}|2)\\d{3}', , , , '1800123456', , , [7, 10]], + [, , '190[0-26]\\d{6}', , , , '1900123456', , , [10]], + [ + , + , + '13(?:00\\d{6}(?:\\d{2})?|45[0-4]\\d{3})|13\\d{4}', + , + , + , + '1300123456', + , + , + [6, 8, 10, 12], + ], + [, , , , , , , , , [-1]], + [, , '14(?:5(?:1[0458]|[23][458])|71\\d)\\d{4}', , , , '147101234', , , [9]], + 'CX', + 61, + '001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011', + '0', + , + , + '0|([59]\\d{7})$', + '8$1', + '0011', + , + , + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + CY: [ + , + [, , '(?:[279]\\d|[58]0)\\d{6}', , , , , , , [8]], + [, , '2[2-6]\\d{6}', , , , '22345678'], + [, , '9[4-79]\\d{6}', , , , '96123456'], + [, , '800\\d{5}', , , , '80001234'], + [, , '90[09]\\d{5}', , , , '90012345'], + [, , '80[1-9]\\d{5}', , , , '80112345'], + [, , '700\\d{5}', , , , '70012345'], + [, , , , , , , , , [-1]], + 'CY', + 357, + '00', + , + , + , + , + , + , + , + [[, '(\\d{2})(\\d{6})', '$1 $2', ['[257-9]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '(?:50|77)\\d{6}', , , , '77123456'], + , + , + [, , , , , , , , , [-1]], + ], + CZ: [ + , + [, , '(?:[2-578]\\d|60)\\d{7}|9\\d{8,11}', , , , , , , [9, 10, 11, 12]], + [, , '(?:2\\d|3[1257-9]|4[16-9]|5[13-9])\\d{7}', , , , '212345678', , , [9]], + [, , '(?:60[1-8]|7(?:0[2-5]|[2379]\\d))\\d{6}', , , , '601123456', , , [9]], + [, , '800\\d{6}', , , , '800123456', , , [9]], + [, , '9(?:0[05689]|76)\\d{6}', , , , '900123456', , , [9]], + [, , '8[134]\\d{7}', , , , '811234567', , , [9]], + [, , '70[01]\\d{6}', , , , '700123456', , , [9]], + [, , '9[17]0\\d{6}', , , , '910123456', , , [9]], + 'CZ', + 420, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['[2-8]|9[015-7]']], + [, '(\\d{2})(\\d{3})(\\d{3})(\\d{2})', '$1 $2 $3 $4', ['96']], + [, '(\\d{2})(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3 $4', ['9']], + [, '(\\d{3})(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3 $4', ['9']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '9(?:5\\d|7[2-4])\\d{6}', , , , '972123456', , , [9]], + , + , + [, , '9(?:3\\d{9}|6\\d{7,10})', , , , '93123456789'], + ], + DE: [ + , + [ + , + , + '[2579]\\d{5,14}|49(?:[34]0|69|8\\d)\\d\\d?|49(?:37|49|60|7[089]|9\\d)\\d{1,3}|49(?:1\\d|2[02-9]|3[2-689]|7[1-7])\\d{1,8}|(?:1|[368]\\d|4[0-8])\\d{3,13}|49(?:[05]\\d|[23]1|[46][1-8])\\d{1,9}', + , + , + , + , + , + , + [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], + [2, 3], + ], + [ + , + , + '32\\d{9,11}|49[2-6]\\d{10}|49[0-7]\\d{3,9}|(?:[34]0|[68]9)\\d{3,13}|(?:2(?:0[1-689]|[1-3569]\\d|4[0-8]|7[1-7]|8[0-7])|3(?:[3569]\\d|4[0-79]|7[1-7]|8[1-8])|4(?:1[02-9]|[2-48]\\d|5[0-6]|6[0-8]|7[0-79])|5(?:0[2-8]|[124-6]\\d|[38][0-8]|[79][0-7])|6(?:0[02-9]|[1-358]\\d|[47][0-8]|6[1-9])|7(?:0[2-8]|1[1-9]|[27][0-7]|3\\d|[4-6][0-8]|8[0-5]|9[013-7])|8(?:0[2-9]|1[0-79]|2\\d|3[0-46-9]|4[0-6]|5[013-9]|6[1-8]|7[0-8]|8[0-24-6])|9(?:0[6-9]|[1-4]\\d|[589][0-7]|6[0-8]|7[0-467]))\\d{3,12}', + , + , + , + '30123456', + , + , + [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], + [2, 3, 4], + ], + [, , '15[0-25-9]\\d{8}|1(?:6[023]|7\\d)\\d{7,8}', , , , '15123456789', , , [10, 11]], + [, , '800\\d{7,12}', , , , '8001234567890', , , [10, 11, 12, 13, 14, 15]], + [, , '(?:137[7-9]|900(?:[135]|9\\d))\\d{6}', , , , '9001234567', , , [10, 11]], + [ + , + , + '180\\d{5,11}|13(?:7[1-6]\\d\\d|8)\\d{4}', + , + , + , + '18012345', + , + , + [7, 8, 9, 10, 11, 12, 13, 14], + ], + [, , '700\\d{8}', , , , '70012345678', , , [11]], + [, , , , , , , , , [-1]], + 'DE', + 49, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{2})(\\d{3,13})', '$1 $2', ['3[02]|40|[68]9'], '0$1'], + [ + , + '(\\d{3})(\\d{3,12})', + '$1 $2', + [ + '2(?:0[1-389]|1[124]|2[18]|3[14])|3(?:[35-9][15]|4[015])|906|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1', + '2(?:0[1-389]|12[0-8])|3(?:[35-9][15]|4[015])|906|2(?:[13][14]|2[18])|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1', + ], + '0$1', + ], + [ + , + '(\\d{4})(\\d{2,11})', + '$1 $2', + [ + '[24-6]|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]', + '[24-6]|3(?:3(?:0[1-467]|2[127-9]|3[124578]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|4[13578]|9[1346])|5(?:0[14]|2[1-3589]|6[1-4]|7[13468]|8[13568])|6(?:2[1-489]|3[124-6]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|6|7[1467]|8[136])|9(?:0[12479]|2[1358]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]|3[68]4[1347]|3(?:47|60)[1356]|3(?:3[46]|46|5[49])[1246]|3[4579]3[1357]', + ], + '0$1', + ], + [, '(\\d{3})(\\d{4})', '$1 $2', ['138'], '0$1'], + [, '(\\d{5})(\\d{2,10})', '$1 $2', ['3'], '0$1'], + [, '(\\d{3})(\\d{5,11})', '$1 $2', ['181'], '0$1'], + [, '(\\d{3})(\\d)(\\d{4,10})', '$1 $2 $3', ['1(?:3|80)|9'], '0$1'], + [, '(\\d{3})(\\d{7,8})', '$1 $2', ['1[67]'], '0$1'], + [, '(\\d{3})(\\d{7,12})', '$1 $2', ['8'], '0$1'], + [, '(\\d{5})(\\d{6})', '$1 $2', ['185', '1850', '18500'], '0$1'], + [, '(\\d{3})(\\d{4})(\\d{4})', '$1 $2 $3', ['7'], '0$1'], + [, '(\\d{4})(\\d{7})', '$1 $2', ['18[68]'], '0$1'], + [, '(\\d{5})(\\d{6})', '$1 $2', ['15[0568]'], '0$1'], + [, '(\\d{4})(\\d{7})', '$1 $2', ['15[1279]'], '0$1'], + [, '(\\d{3})(\\d{8})', '$1 $2', ['18'], '0$1'], + [, '(\\d{3})(\\d{2})(\\d{7,8})', '$1 $2 $3', ['1(?:6[023]|7)'], '0$1'], + [, '(\\d{4})(\\d{2})(\\d{7})', '$1 $2 $3', ['15[279]'], '0$1'], + [, '(\\d{3})(\\d{2})(\\d{8})', '$1 $2 $3', ['15'], '0$1'], + ], + , + [ + , + , + '16(?:4\\d{1,10}|[89]\\d{1,11})', + , + , + , + '16412345', + , + , + [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], + ], + , + , + [, , , , , , , , , [-1]], + [, , '18(?:1\\d{5,11}|[2-9]\\d{8})', , , , '18500123456', , , [8, 9, 10, 11, 12, 13, 14]], + , + , + [ + , + , + '1(?:6(?:013|255|399)|7(?:(?:[015]1|[69]3)3|[2-4]55|[78]99))\\d{7,8}|15(?:(?:[03-68]00|113)\\d|2\\d55|7\\d99|9\\d33)\\d{7}', + , + , + , + '177991234567', + , + , + [12, 13], + ], + ], + DJ: [ + , + [, , '(?:2\\d|77)\\d{6}', , , , , , , [8]], + [, , '2(?:1[2-5]|7[45])\\d{5}', , , , '21360003'], + [, , '77\\d{6}', , , , '77831001'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'DJ', + 253, + '00', + , + , + , + , + , + , + , + [[, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[27]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + DK: [ + , + [, , '[2-9]\\d{7}', , , , , , , [8]], + [, , '(?:[2-7]\\d|8[126-9]|9[1-46-9])\\d{6}', , , , '32123456'], + [, , '(?:[2-7]\\d|8[126-9]|9[1-46-9])\\d{6}', , , , '32123456'], + [, , '80\\d{6}', , , , '80123456'], + [, , '90\\d{6}', , , , '90123456'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'DK', + 45, + '00', + , + , + , + , + , + , + 1, + [[, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[2-9]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + DM: [ + , + [, , '(?:[58]\\d\\d|767|900)\\d{7}', , , , , , , [10], [7]], + [ + , + , + '767(?:2(?:55|66)|4(?:2[01]|4[0-25-9])|50[0-4])\\d{4}', + , + , + , + '7674201234', + , + , + , + [7], + ], + [ + , + , + '767(?:2(?:[2-4689]5|7[5-7])|31[5-7]|61[1-8]|70[1-6])\\d{4}', + , + , + , + '7672251234', + , + , + , + [7], + ], + [, , '8(?:00|33|44|55|66|77|88)[2-9]\\d{6}', , , , '8002123456'], + [, , '900[2-9]\\d{6}', , , , '9002123456'], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[12]|33|44|66|77|88)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , , , , , , , , [-1]], + 'DM', + 1, + '011', + '1', + , + , + '1|([2-7]\\d{6})$', + '767$1', + , + , + , + , + [, , , , , , , , , [-1]], + , + '767', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + DO: [ + , + [, , '(?:[58]\\d\\d|900)\\d{7}', , , , , , , [10], [7]], + [ + , + , + '8(?:[04]9[2-9]\\d\\d|29(?:2(?:[0-59]\\d|6[04-9]|7[0-27]|8[0237-9])|3(?:[0-35-9]\\d|4[7-9])|[45]\\d\\d|6(?:[0-27-9]\\d|[3-5][1-9]|6[0135-8])|7(?:0[013-9]|[1-37]\\d|4[1-35689]|5[1-4689]|6[1-57-9]|8[1-79]|9[1-8])|8(?:0[146-9]|1[0-48]|[248]\\d|3[1-79]|5[01589]|6[013-68]|7[124-8]|9[0-8])|9(?:[0-24]\\d|3[02-46-9]|5[0-79]|60|7[0169]|8[57-9]|9[02-9])))\\d{4}', + , + , + , + '8092345678', + , + , + , + [7], + ], + [, , '8[024]9[2-9]\\d{6}', , , , '8092345678', , , , [7]], + [, , '8(?:00(?:14|[2-9]\\d)|(?:33|44|55|66|77|88)[2-9]\\d)\\d{5}', , , , '8002123456'], + [, , '900[2-9]\\d{6}', , , , '9002123456'], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[12]|33|44|66|77|88)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , , , , , , , , [-1]], + 'DO', + 1, + '011', + '1', + , + , + '1', + , + , + , + , + , + [, , , , , , , , , [-1]], + , + '8001|8[024]9', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + DZ: [ + , + [, , '(?:[1-4]|[5-79]\\d|80)\\d{7}', , , , , , , [8, 9]], + [, , '9619\\d{5}|(?:1\\d|2[013-79]|3[0-8]|4[0135689])\\d{6}', , , , '12345678'], + [ + , + , + '(?:5(?:4[0-29]|5\\d|6[0-2])|6(?:[569]\\d|7[0-6])|7[7-9]\\d)\\d{6}', + , + , + , + '551234567', + , + , + [9], + ], + [, , '800\\d{6}', , , , '800123456', , , [9]], + [, , '80[3-689]1\\d{5}', , , , '808123456', , , [9]], + [, , '80[12]1\\d{5}', , , , '801123456', , , [9]], + [, , , , , , , , , [-1]], + [, , '98[23]\\d{6}', , , , '983123456', , , [9]], + 'DZ', + 213, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[1-4]'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['9'], '0$1'], + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[5-8]'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + EC: [ + , + [, , '1\\d{9,10}|(?:[2-7]|9\\d)\\d{7}', , , , , , , [8, 9, 10, 11], [7]], + [, , '[2-7][2-7]\\d{6}', , , , '22123456', , , [8], [7]], + [ + , + , + '964[0-2]\\d{5}|9(?:39|[57][89]|6[0-36-9]|[89]\\d)\\d{6}', + , + , + , + '991234567', + , + , + [9], + ], + [, , '1800\\d{7}|1[78]00\\d{6}', , , , '18001234567', , , [10, 11]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '[2-7]890\\d{4}', , , , '28901234', , , [8]], + 'EC', + 593, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{4})', '$1-$2', ['[2-7]']], + [, '(\\d)(\\d{3})(\\d{4})', '$1 $2-$3', ['[2-7]'], '(0$1)'], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['9'], '0$1'], + [, '(\\d{4})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['1']], + ], + [ + [, '(\\d)(\\d{3})(\\d{4})', '$1-$2-$3', ['[2-7]']], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['9'], '0$1'], + [, '(\\d{4})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['1']], + ], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + EE: [ + , + [, , '8\\d{9}|[4578]\\d{7}|(?:[3-8]\\d|90)\\d{5}', , , , , , , [7, 8, 10]], + [, , '(?:3[23589]|4[3-8]|6\\d|7[1-9]|88)\\d{5}', , , , '3212345', , , [7]], + [ + , + , + '(?:5\\d{5}|8(?:1(?:0(?:000|[3-9]\\d\\d)|(?:1(?:0[236]|1\\d)|(?:23|[3-79]\\d)\\d)\\d)|2(?:0(?:000|(?:19|[24-7]\\d)\\d)|(?:(?:[124-6]\\d|3[5-9])\\d|7(?:[679]\\d|8[13-9])|8(?:[2-6]\\d|7[01]))\\d)|[349]\\d{4}))\\d\\d|5(?:(?:[02]\\d|5[0-478])\\d|1(?:[0-8]\\d|95)|6(?:4[0-4]|5[1-589]))\\d{3}', + , + , + , + '51234567', + , + , + [7, 8], + ], + [, , '800(?:(?:0\\d\\d|1)\\d|[2-9])\\d{3}', , , , '80012345'], + [, , '(?:40\\d\\d|900)\\d{4}', , , , '9001234', , , [7, 8]], + [, , , , , , , , , [-1]], + [, , '70[0-2]\\d{5}', , , , '70012345', , , [8]], + [, , , , , , , , , [-1]], + 'EE', + 372, + '00', + , + , + , + , + , + , + , + [ + [ + , + '(\\d{3})(\\d{4})', + '$1 $2', + [ + '[369]|4[3-8]|5(?:[0-2]|5[0-478]|6[45])|7[1-9]|88', + '[369]|4[3-8]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))|7[1-9]|88', + ], + ], + [, '(\\d{4})(\\d{3,4})', '$1 $2', ['[45]|8(?:00|[1-49])', '[45]|8(?:00[1-9]|[1-49])']], + [, '(\\d{2})(\\d{2})(\\d{4})', '$1 $2 $3', ['7']], + [, '(\\d{4})(\\d{3})(\\d{3})', '$1 $2 $3', ['8']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , '800[2-9]\\d{3}', , , , , , , [7]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + EG: [ + , + [, , '[189]\\d{8,9}|[24-6]\\d{8}|[135]\\d{7}', , , , , , , [8, 9, 10], [6, 7]], + [ + , + , + '13[23]\\d{6}|(?:15|57)\\d{6,7}|(?:2[2-4]|3|4[05-8]|5[05]|6[24-689]|8[2468]|9[235-7])\\d{7}', + , + , + , + '234567890', + , + , + [8, 9], + [6, 7], + ], + [, , '1[0-25]\\d{8}', , , , '1001234567', , , [10]], + [, , '800\\d{7}', , , , '8001234567', , , [10]], + [, , '900\\d{7}', , , , '9001234567', , , [10]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'EG', + 20, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d)(\\d{7,8})', '$1 $2', ['[23]'], '0$1'], + [, '(\\d{2})(\\d{6,7})', '$1 $2', ['1[35]|[4-6]|8[2468]|9[235-7]'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['[189]'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + EH: [ + , + [, , '[5-8]\\d{8}', , , , , , , [9]], + [, , '528[89]\\d{5}', , , , '528812345'], + [, , '(?:6(?:[0-79]\\d|8[0-247-9])|7(?:[017]\\d|6[0-367]))\\d{6}', , , , '650123456'], + [, , '80\\d{7}', , , , '801234567'], + [, , '89\\d{7}', , , , '891234567'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '592(?:4[0-2]|93)\\d{4}', , , , '592401234'], + 'EH', + 212, + '00', + '0', + , + , + '0', + , + , + , + , + , + [, , , , , , , , , [-1]], + , + '528[89]', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + ER: [ + , + [, , '[178]\\d{6}', , , , , , , [7], [6]], + [, , '(?:1(?:1[12568]|[24]0|55|6[146])|8\\d\\d)\\d{4}', , , , '8370362', , , , [6]], + [, , '(?:17[1-3]|7\\d\\d)\\d{4}', , , , '7123456'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'ER', + 291, + '00', + '0', + , + , + '0', + , + , + , + [[, '(\\d)(\\d{3})(\\d{3})', '$1 $2 $3', ['[178]'], '0$1']], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + ES: [ + , + [, , '[5-9]\\d{8}', , , , , , , [9]], + [ + , + , + '96906(?:0[0-8]|1[1-9]|[2-9]\\d)\\d\\d|9(?:69(?:0[0-57-9]|[1-9]\\d)|73(?:[0-8]\\d|9[1-9]))\\d{4}|(?:8(?:[1356]\\d|[28][0-8]|[47][1-9])|9(?:[135]\\d|[268][0-8]|4[1-9]|7[124-9]))\\d{6}', + , + , + , + '810123456', + ], + [ + , + , + '(?:590[16]00\\d|9(?:6906(?:09|10)|7390\\d\\d))\\d\\d|(?:6\\d|7[1-48])\\d{7}', + , + , + , + '612345678', + ], + [, , '[89]00\\d{6}', , , , '800123456'], + [, , '80[367]\\d{6}', , , , '803123456'], + [, , '90[12]\\d{6}', , , , '901123456'], + [, , '70\\d{7}', , , , '701234567'], + [, , , , , , , , , [-1]], + 'ES', + 34, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{4})', '$1', ['905']], + [, '(\\d{6})', '$1', ['[79]9']], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['[89]00']], + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[5-9]']], + ], + [ + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['[89]00']], + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[5-9]']], + ], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '51\\d{7}', , , , '511234567'], + , + , + [, , , , , , , , , [-1]], + ], + ET: [ + , + [, , '(?:11|[2-59]\\d)\\d{7}', , , , , , , [9], [7]], + [ + , + , + '11667[01]\\d{3}|(?:11(?:1(?:1[124]|2[2-7]|3[1-5]|5[5-8]|8[6-8])|2(?:13|3[6-8]|5[89]|7[05-9]|8[2-6])|3(?:2[01]|3[0-289]|4[1289]|7[1-4]|87)|4(?:1[69]|3[2-49]|4[0-3]|6[5-8])|5(?:1[578]|44|5[0-4])|6(?:1[78]|2[69]|39|4[5-7]|5[1-5]|6[0-59]|8[015-8]))|2(?:2(?:11[1-9]|22[0-7]|33\\d|44[1467]|66[1-68])|5(?:11[124-6]|33[2-8]|44[1467]|55[14]|66[1-3679]|77[124-79]|880))|3(?:3(?:11[0-46-8]|(?:22|55)[0-6]|33[0134689]|44[04]|66[01467])|4(?:44[0-8]|55[0-69]|66[0-3]|77[1-5]))|4(?:6(?:119|22[0-24-7]|33[1-5]|44[13-69]|55[14-689]|660|88[1-4])|7(?:(?:11|22)[1-9]|33[13-7]|44[13-6]|55[1-689]))|5(?:7(?:227|55[05]|(?:66|77)[14-8])|8(?:11[149]|22[013-79]|33[0-68]|44[013-8]|550|66[1-5]|77\\d)))\\d{4}', + , + , + , + '111112345', + , + , + , + [7], + ], + [, , '9\\d{8}', , , , '911234567'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'ET', + 251, + '00', + '0', + , + , + '0', + , + , + , + [[, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['[1-59]'], '0$1']], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + FI: [ + , + [ + , + , + '[1-35689]\\d{4}|7\\d{10,11}|(?:[124-7]\\d|3[0-46-9])\\d{8}|[1-9]\\d{5,8}', + , + , + , + , + , + , + [5, 6, 7, 8, 9, 10, 11, 12], + ], + [, , '(?:1[3-79][1-8]|[235689][1-8]\\d)\\d{2,6}', , , , '131234567', , , [5, 6, 7, 8, 9]], + [, , '4946\\d{2,6}|(?:4[0-8]|50)\\d{4,8}', , , , '412345678', , , [6, 7, 8, 9, 10]], + [, , '800\\d{4,6}', , , , '800123456', , , [7, 8, 9]], + [, , '[67]00\\d{5,6}', , , , '600123456', , , [8, 9]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'FI', + 358, + '00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))', + '0', + , + , + '0', + , + '00', + , + [ + [, '(\\d{5})', '$1', ['75[12]'], '0$1'], + [, '(\\d)(\\d{4,9})', '$1 $2', ['[2568][1-8]|3(?:0[1-9]|[1-9])|9'], '0$1'], + [, '(\\d{6})', '$1', ['11']], + [, '(\\d{3})(\\d{3,7})', '$1 $2', ['[12]00|[368]|70[07-9]'], '0$1'], + [, '(\\d{2})(\\d{4,8})', '$1 $2', ['[1245]|7[135]'], '0$1'], + [, '(\\d{2})(\\d{6,10})', '$1 $2', ['7'], '0$1'], + ], + [ + [, '(\\d)(\\d{4,9})', '$1 $2', ['[2568][1-8]|3(?:0[1-9]|[1-9])|9'], '0$1'], + [, '(\\d{3})(\\d{3,7})', '$1 $2', ['[12]00|[368]|70[07-9]'], '0$1'], + [, '(\\d{2})(\\d{4,8})', '$1 $2', ['[1245]|7[135]'], '0$1'], + [, '(\\d{2})(\\d{6,10})', '$1 $2', ['7'], '0$1'], + ], + [, , , , , , , , , [-1]], + 1, + '1[03-79]|[2-9]', + [ + , + , + '20(?:2[023]|9[89])\\d{1,6}|(?:60[12]\\d|7099)\\d{4,5}|(?:606|7(?:0[78]|1|3\\d))\\d{7}|(?:[1-3]00|7(?:0[1-5]\\d\\d|5[03-9]))\\d{3,7}', + ], + [ + , + , + '20\\d{4,8}|60[12]\\d{5,6}|7(?:099\\d{4,5}|5[03-9]\\d{3,7})|20[2-59]\\d\\d|(?:606|7(?:0[78]|1|3\\d))\\d{7}|(?:10|29|3[09]|70[1-5]\\d)\\d{4,8}', + , + , + , + '10112345', + ], + , + , + [, , , , , , , , , [-1]], + ], + FJ: [ + , + [, , '45\\d{5}|(?:0800\\d|[235-9])\\d{6}', , , , , , , [7, 11]], + [, , '603\\d{4}|(?:3[0-5]|6[25-7]|8[58])\\d{5}', , , , '3212345', , , [7]], + [, , '(?:[279]\\d|45|5[01568]|8[034679])\\d{5}', , , , '7012345', , , [7]], + [, , '0800\\d{7}', , , , '08001234567', , , [11]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'FJ', + 679, + '0(?:0|52)', + , + , + , + , + , + '00', + , + [ + [, '(\\d{3})(\\d{4})', '$1 $2', ['[235-9]|45']], + [, '(\\d{4})(\\d{3})(\\d{4})', '$1 $2 $3', ['0']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + FK: [ + , + [, , '[2-7]\\d{4}', , , , , , , [5]], + [, , '[2-47]\\d{4}', , , , '31234'], + [, , '[56]\\d{4}', , , , '51234'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'FK', + 500, + '00', + , + , + , + , + , + , + , + , + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + FM: [ + , + [, , '(?:[39]\\d\\d|820)\\d{4}', , , , , , , [7]], + [ + , + , + '31(?:00[67]|208|309)\\d\\d|(?:3(?:[2357]0[1-9]|602|804|905)|(?:820|9[2-6]\\d)\\d)\\d{3}', + , + , + , + '3201234', + ], + [ + , + , + '31(?:00[67]|208|309)\\d\\d|(?:3(?:[2357]0[1-9]|602|804|905)|(?:820|9[2-7]\\d)\\d)\\d{3}', + , + , + , + '3501234', + ], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'FM', + 691, + '00', + , + , + , + , + , + , + , + [[, '(\\d{3})(\\d{4})', '$1 $2', ['[389]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + FO: [ + , + [, , '[2-9]\\d{5}', , , , , , , [6]], + [, , '(?:20|[34]\\d|8[19])\\d{4}', , , , '201234'], + [, , '(?:[27][1-9]|5\\d|91)\\d{4}', , , , '211234'], + [, , '80[257-9]\\d{3}', , , , '802123'], + [, , '90(?:[13-5][15-7]|2[125-7]|9\\d)\\d\\d', , , , '901123'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '(?:6[0-36]|88)\\d{4}', , , , '601234'], + 'FO', + 298, + '00', + , + , + , + '(10(?:01|[12]0|88))', + , + , + , + [[, '(\\d{6})', '$1', ['[2-9]'], , '$CC $1']], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + FR: [ + , + [, , '[1-9]\\d{8}', , , , , , , [9]], + [, , '(?:[1-35]\\d|4[1-9])\\d{7}', , , , '123456789'], + [, , '(?:6(?:[0-24-8]\\d|3[0-8]|9[589])|7(?:00|[3-9]\\d))\\d{6}', , , , '612345678'], + [, , '80[0-5]\\d{6}', , , , '801234567'], + [ + , + , + '836(?:0[0-36-9]|[1-9]\\d)\\d{4}|8(?:1[2-9]|2[2-47-9]|3[0-57-9]|[569]\\d|8[0-35-9])\\d{6}', + , + , + , + '891123456', + ], + [, , '8(?:1[01]|2[0156]|84)\\d{6}', , , , '884012345'], + [, , , , , , , , , [-1]], + [, , '9\\d{8}', , , , '912345678'], + 'FR', + 33, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{4})', '$1', ['10']], + [, '(\\d{3})(\\d{3})', '$1 $2', ['1']], + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['8'], '0 $1'], + [, '(\\d)(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4 $5', ['[1-79]'], '0$1'], + ], + [ + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['8'], '0 $1'], + [, '(\\d)(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4 $5', ['[1-79]'], '0$1'], + ], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '80[6-9]\\d{6}', , , , '806123456'], + , + , + [, , , , , , , , , [-1]], + ], + GA: [ + , + [, , '(?:[067]\\d|11)\\d{6}|[2-7]\\d{6}', , , , , , , [7, 8]], + [, , '[01]1\\d{6}', , , , '01441234', , , [8]], + [ + , + , + '(?:(?:0[2-7]\\d|6(?:0[0-4]|10|[256]\\d))\\d|7(?:[47]\\d\\d|658))\\d{4}|[2-7]\\d{6}', + , + , + , + '06031234', + ], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'GA', + 241, + '00', + , + , + , + '0(11\\d{6}|60\\d{6}|61\\d{6}|6[256]\\d{6}|7[47]\\d{6}|76\\d{6})', + '$1', + , + , + [ + [, '(\\d)(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[2-7]'], '0$1'], + [, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['11|[67]'], '0$1'], + [, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['0']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + GB: [ + , + [, , '[1-357-9]\\d{9}|[18]\\d{8}|8\\d{6}', , , , , , , [7, 9, 10], [4, 5, 6, 8]], + [ + , + , + '(?:1(?:1(?:3(?:[0-58]\\d\\d|73[0235])|4(?:[0-5]\\d\\d|69[7-9]|70[0359])|(?:5[0-26-9]|[78][0-49])\\d\\d|6(?:[0-4]\\d\\d|50[0-24-69]))|2(?:(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-47-9]|7[013-9]|9\\d)\\d\\d|1(?:[0-7]\\d\\d|8(?:[02]\\d|1[0-278])))|(?:3(?:0\\d|1[0-8]|[25][02-9]|3[02-579]|[468][0-46-9]|7[1-35-79]|9[2-578])|4(?:0[03-9]|[137]\\d|[28][02-57-9]|4[02-69]|5[0-8]|[69][0-79])|5(?:0[1-35-9]|[16]\\d|2[024-9]|3[015689]|4[02-9]|5[03-9]|7[0-35-9]|8[0-468]|9[0-57-9])|6(?:0[034689]|1\\d|2[0-35689]|[38][013-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|9[0-24578])|7(?:0[0246-9]|2\\d|3[0236-8]|4[03-9]|5[0-46-9]|6[013-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-57-9]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\\d|8[02-9]|9[02569])|9(?:0[02-589]|[18]\\d|2[02-689]|3[1-57-9]|4[2-9]|5[0-579]|6[2-47-9]|7[0-24578]|9[2-57]))\\d\\d)|2(?:0[013478]|3[0189]|4[017]|8[0-46-9]|9[0-2])\\d{3})\\d{4}|1(?:2(?:0(?:46[1-4]|87[2-9])|545[1-79]|76(?:2\\d|3[1-8]|6[1-6])|9(?:7(?:2[0-4]|3[2-5])|8(?:2[2-8]|7[0-47-9]|8[3-5])))|3(?:6(?:38[2-5]|47[23])|8(?:47[04-9]|64[0157-9]))|4(?:044[1-7]|20(?:2[23]|8\\d)|6(?:0(?:30|5[2-57]|6[1-8]|7[2-8])|140)|8(?:052|87[1-3]))|5(?:2(?:4(?:3[2-79]|6\\d)|76\\d)|6(?:26[06-9]|686))|6(?:06(?:4\\d|7[4-79])|295[5-7]|35[34]\\d|47(?:24|61)|59(?:5[08]|6[67]|74)|9(?:55[0-4]|77[23]))|7(?:26(?:6[13-9]|7[0-7])|(?:442|688)\\d|50(?:2[0-3]|[3-68]2|76))|8(?:27[56]\\d|37(?:5[2-5]|8[239])|843[2-58])|9(?:0(?:0(?:6[1-8]|85)|52\\d)|3583|4(?:66[1-8]|9(?:2[01]|81))|63(?:23|3[1-4])|9561))\\d{3}', + , + , + , + '1212345678', + , + , + [9, 10], + [4, 5, 6, 7, 8], + ], + [ + , + , + '7(?:457[0-57-9]|700[01]|911[028])\\d{5}|7(?:[1-3]\\d\\d|4(?:[0-46-9]\\d|5[0-689])|5(?:0[0-8]|[13-9]\\d|2[0-35-9])|7(?:0[1-9]|[1-7]\\d|8[02-9]|9[0-689])|8(?:[014-9]\\d|[23][0-8])|9(?:[024-9]\\d|1[02-9]|3[0-689]))\\d{6}', + , + , + , + '7400123456', + , + , + [10], + ], + [, , '80[08]\\d{7}|800\\d{6}|8001111', , , , '8001234567'], + [ + , + , + '(?:8(?:4[2-5]|7[0-3])|9(?:[01]\\d|8[2-49]))\\d{7}|845464\\d', + , + , + , + '9012345678', + , + , + [7, 10], + ], + [, , , , , , , , , [-1]], + [, , '70\\d{8}', , , , '7012345678', , , [10]], + [, , '56\\d{8}', , , , '5612345678', , , [10]], + 'GB', + 44, + '00', + '0', + ' x', + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{4})', '$1 $2', ['800', '8001', '80011', '800111', '8001111'], '0$1'], + [, '(\\d{3})(\\d{2})(\\d{2})', '$1 $2 $3', ['845', '8454', '84546', '845464'], '0$1'], + [, '(\\d{3})(\\d{6})', '$1 $2', ['800'], '0$1'], + [ + , + '(\\d{5})(\\d{4,5})', + '$1 $2', + [ + '1(?:38|5[23]|69|76|94)', + '1(?:(?:38|69)7|5(?:24|39)|768|946)', + '1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)', + ], + '0$1', + ], + [, '(\\d{4})(\\d{5,6})', '$1 $2', ['1(?:[2-69][02-9]|[78])'], '0$1'], + [ + , + '(\\d{2})(\\d{4})(\\d{4})', + '$1 $2 $3', + ['[25]|7(?:0|6[02-9])', '[25]|7(?:0|6(?:[03-9]|2[356]))'], + '0$1', + ], + [, '(\\d{4})(\\d{6})', '$1 $2', ['7'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['[1389]'], '0$1'], + ], + , + [ + , + , + '76(?:464|652)\\d{5}|76(?:0[0-2]|2[356]|34|4[01347]|5[49]|6[0-369]|77|81|9[139])\\d{6}', + , + , + , + '7640123456', + , + , + [10], + ], + 1, + , + [, , , , , , , , , [-1]], + [, , '(?:3[0347]|55)\\d{8}', , , , '5512345678', , , [10]], + , + , + [, , , , , , , , , [-1]], + ], + GD: [ + , + [, , '(?:473|[58]\\d\\d|900)\\d{7}', , , , , , , [10], [7]], + [ + , + , + '473(?:2(?:3[0-2]|69)|3(?:2[89]|86)|4(?:[06]8|3[5-9]|4[0-49]|5[5-79]|73|90)|63[68]|7(?:58|84)|800|938)\\d{4}', + , + , + , + '4732691234', + , + , + , + [7], + ], + [ + , + , + '473(?:4(?:0[2-79]|1[04-9]|2[0-5]|58)|5(?:2[01]|3[3-8])|901)\\d{4}', + , + , + , + '4734031234', + , + , + , + [7], + ], + [, , '8(?:00|33|44|55|66|77|88)[2-9]\\d{6}', , , , '8002123456'], + [, , '900[2-9]\\d{6}', , , , '9002123456'], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[12]|33|44|66|77|88)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , , , , , , , , [-1]], + 'GD', + 1, + '011', + '1', + , + , + '1|([2-9]\\d{6})$', + '473$1', + , + , + , + , + [, , , , , , , , , [-1]], + , + '473', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + GE: [ + , + [, , '(?:[3-57]\\d\\d|800)\\d{6}', , , , , , , [9], [6, 7]], + [ + , + , + '(?:3(?:[256]\\d|4[124-9]|7[0-4])|4(?:1\\d|2[2-7]|3[1-79]|4[2-8]|7[239]|9[1-7]))\\d{6}', + , + , + , + '322123456', + , + , + , + [6, 7], + ], + [ + , + , + '5(?:(?:0555|1177)[5-9]|757(?:7[7-9]|8[01]))\\d{3}|5(?:0070|(?:11|33)33|[25]222)[0-4]\\d{3}|5(?:00(?:0\\d|50)|11(?:00|1\\d|2[0-4])|5200|75(?:00|[57]5)|8(?:0(?:[01]\\d|2[0-4])|58[89]|8(?:55|88)))\\d{4}|(?:5(?:[14]4|5[0157-9]|68|7[0147-9]|9[1-35-9])|790)\\d{6}', + , + , + , + '555123456', + ], + [, , '800\\d{6}', , , , '800123456'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '70[67]\\d{6}', , , , '706123456'], + 'GE', + 995, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['70'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['32'], '0$1'], + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[57]']], + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[348]'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , '70[67]\\d{6}'], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + GF: [ + , + [, , '(?:[56]94|80\\d|976)\\d{6}', , , , , , , [9]], + [, , '594(?:[023]\\d|1[01]|4[03-9]|5[6-9]|6[0-3]|80|9[0-4])\\d{4}', , , , '594101234'], + [, , '694(?:[0-249]\\d|3[0-48])\\d{4}', , , , '694201234'], + [, , '80[0-5]\\d{6}', , , , '800012345'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '976\\d{6}', , , , '976012345'], + 'GF', + 594, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[569]'], '0$1'], + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['8'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + GG: [ + , + [, , '(?:1481|[357-9]\\d{3})\\d{6}|8\\d{6}(?:\\d{2})?', , , , , , , [7, 9, 10], [6]], + [, , '1481[25-9]\\d{5}', , , , '1481256789', , , [10], [6]], + [, , '7(?:(?:781|839)\\d|911[17])\\d{5}', , , , '7781123456', , , [10]], + [, , '80[08]\\d{7}|800\\d{6}|8001111', , , , '8001234567'], + [ + , + , + '(?:8(?:4[2-5]|7[0-3])|9(?:[01]\\d|8[0-3]))\\d{7}|845464\\d', + , + , + , + '9012345678', + , + , + [7, 10], + ], + [, , , , , , , , , [-1]], + [, , '70\\d{8}', , , , '7012345678', , , [10]], + [, , '56\\d{8}', , , , '5612345678', , , [10]], + 'GG', + 44, + '00', + '0', + , + , + '0|([25-9]\\d{5})$', + '1481$1', + , + , + , + , + [ + , + , + '76(?:464|652)\\d{5}|76(?:0[0-2]|2[356]|34|4[01347]|5[49]|6[0-369]|77|81|9[139])\\d{6}', + , + , + , + '7640123456', + , + , + [10], + ], + , + , + [, , , , , , , , , [-1]], + [, , '(?:3[0347]|55)\\d{8}', , , , '5512345678', , , [10]], + , + , + [, , , , , , , , , [-1]], + ], + GH: [ + , + [, , '(?:[235]\\d{3}|800)\\d{5}', , , , , , , [8, 9], [7]], + [ + , + , + '3082[0-5]\\d{4}|3(?:0(?:[237]\\d|8[01])|[167](?:2[0-6]|7\\d|80)|2(?:2[0-5]|7\\d|80)|3(?:2[0-3]|7\\d|80)|4(?:2[013-9]|3[01]|7\\d|80)|5(?:2[0-7]|7\\d|80)|8(?:2[0-2]|7\\d|80)|9(?:[28]0|7\\d))\\d{5}', + , + , + , + '302345678', + , + , + [9], + [7], + ], + [ + , + , + '(?:2(?:[0346-8]\\d|5[67])|5(?:[0457]\\d|6[01]|9[1-9]))\\d{6}', + , + , + , + '231234567', + , + , + [9], + ], + [, , '800\\d{5}', , , , '80012345', , , [8]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'GH', + 233, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{4})', '$1 $2', ['[237]|8[0-2]']], + [, '(\\d{3})(\\d{5})', '$1 $2', ['8'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['[235]'], '0$1'], + ], + [ + [, '(\\d{3})(\\d{5})', '$1 $2', ['8'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['[235]'], '0$1'], + ], + [, , , , , , , , , [-1]], + , + , + [, , '800\\d{5}', , , , , , , [8]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + GI: [ + , + [, , '(?:[25]\\d\\d|606)\\d{5}', , , , , , , [8]], + [, , '21(?:6[24-7]\\d|90[0-2])\\d{3}|2(?:00|2[25])\\d{5}', , , , '20012345'], + [, , '(?:5[146-8]\\d|606)\\d{5}', , , , '57123456'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'GI', + 350, + '00', + , + , + , + , + , + , + , + [[, '(\\d{3})(\\d{5})', '$1 $2', ['2']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + GL: [ + , + [, , '(?:19|[2-689]\\d|70)\\d{4}', , , , , , , [6]], + [, , '(?:19|3[1-7]|6[14689]|70|8[14-79]|9\\d)\\d{4}', , , , '321000'], + [, , '[245]\\d{5}', , , , '221234'], + [, , '80\\d{4}', , , , '801234'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '3[89]\\d{4}', , , , '381234'], + 'GL', + 299, + '00', + , + , + , + , + , + , + , + [[, '(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3', ['19|[2-9]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + GM: [ + , + [, , '[2-9]\\d{6}', , , , , , , [7]], + [ + , + , + '(?:4(?:[23]\\d\\d|4(?:1[024679]|[6-9]\\d))|5(?:5(?:3\\d|4[0-7])|6[67]\\d|7(?:1[04]|2[035]|3[58]|48))|8\\d{3})\\d{3}', + , + , + , + '5661234', + ], + [, , '(?:[23679]\\d|5[0-389])\\d{5}', , , , '3012345'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'GM', + 220, + '00', + , + , + , + , + , + , + , + [[, '(\\d{3})(\\d{4})', '$1 $2', ['[2-9]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + GN: [ + , + [, , '722\\d{6}|(?:3|6\\d)\\d{7}', , , , , , , [8, 9]], + [ + , + , + '3(?:0(?:24|3[12]|4[1-35-7]|5[13]|6[189]|[78]1|9[1478])|1\\d\\d)\\d{4}', + , + , + , + '30241234', + , + , + [8], + ], + [, , '6[0-356]\\d{7}', , , , '601123456', , , [9]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '722\\d{6}', , , , '722123456', , , [9]], + 'GN', + 224, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['3']], + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[67]']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + GP: [ + , + [, , '(?:590|(?:69|80)\\d|976)\\d{6}', , , , , , , [9]], + [ + , + , + '590(?:0[1-68]|1[0-24]|2[0-68]|3[1289]|4[0-24-9]|5[3-579]|6[0189]|7[08]|8[0-689]|9\\d)\\d{4}', + , + , + , + '590201234', + ], + [, , '69(?:0\\d\\d|1(?:2[2-9]|3[0-5]))\\d{4}', , , , '690001234'], + [, , '80[0-5]\\d{6}', , , , '800012345'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '976[01]\\d{5}', , , , '976012345'], + 'GP', + 590, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[569]'], '0$1'], + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['8'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + 1, + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + GQ: [ + , + [, , '222\\d{6}|(?:3\\d|55|[89]0)\\d{7}', , , , , , , [9]], + [, , '33[0-24-9]\\d[46]\\d{4}|3(?:33|5\\d)\\d[7-9]\\d{4}', , , , '333091234'], + [, , '(?:222|55\\d)\\d{6}', , , , '222123456'], + [, , '80\\d[1-9]\\d{5}', , , , '800123456'], + [, , '90\\d[1-9]\\d{5}', , , , '900123456'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'GQ', + 240, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['[235]']], + [, '(\\d{3})(\\d{6})', '$1 $2', ['[89]']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + GR: [ + , + [, , '5005000\\d{3}|8\\d{9,11}|(?:[269]\\d|70)\\d{8}', , , , , , , [10, 11, 12]], + [ + , + , + '2(?:1\\d\\d|2(?:2[1-46-9]|[36][1-8]|4[1-7]|5[1-4]|7[1-5]|[89][1-9])|3(?:1\\d|2[1-57]|[35][1-3]|4[13]|7[1-7]|8[124-6]|9[1-79])|4(?:1\\d|2[1-8]|3[1-4]|4[13-5]|6[1-578]|9[1-5])|5(?:1\\d|[29][1-4]|3[1-5]|4[124]|5[1-6])|6(?:1\\d|[269][1-6]|3[1245]|4[1-7]|5[13-9]|7[14]|8[1-5])|7(?:1\\d|2[1-5]|3[1-6]|4[1-7]|5[1-57]|6[135]|9[125-7])|8(?:1\\d|2[1-5]|[34][1-4]|9[1-57]))\\d{6}', + , + , + , + '2123456789', + , + , + [10], + ], + [, , '68[57-9]\\d{7}|(?:69|94)\\d{8}', , , , '6912345678', , , [10]], + [, , '800\\d{7,9}', , , , '8001234567'], + [, , '90[19]\\d{7}', , , , '9091234567', , , [10]], + [, , '8(?:0[16]|12|[27]5|50)\\d{7}', , , , '8011234567', , , [10]], + [, , '70\\d{8}', , , , '7012345678', , , [10]], + [, , , , , , , , , [-1]], + 'GR', + 30, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{2})(\\d{4})(\\d{4})', '$1 $2 $3', ['21|7']], + [ + , + '(\\d{4})(\\d{6})', + '$1 $2', + ['2(?:2|3[2-57-9]|4[2-469]|5[2-59]|6[2-9]|7[2-69]|8[2-49])|5'], + ], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['[2689]']], + [, '(\\d{3})(\\d{3,4})(\\d{5})', '$1 $2 $3', ['8']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '5005000\\d{3}', , , , '5005000123', , , [10]], + , + , + [, , , , , , , , , [-1]], + ], + GT: [ + , + [, , '(?:1\\d{3}|[2-7])\\d{7}', , , , , , , [8, 11]], + [, , '[267][2-9]\\d{6}', , , , '22456789', , , [8]], + [, , '[3-5]\\d{7}', , , , '51234567', , , [8]], + [, , '18[01]\\d{8}', , , , '18001112222', , , [11]], + [, , '19\\d{9}', , , , '19001112222', , , [11]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'GT', + 502, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{4})(\\d{4})', '$1 $2', ['[2-7]']], + [, '(\\d{4})(\\d{3})(\\d{4})', '$1 $2 $3', ['1']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + GU: [ + , + [, , '(?:[58]\\d\\d|671|900)\\d{7}', , , , , , , [10], [7]], + [ + , + , + '671(?:3(?:00|3[39]|4[349]|55|6[26])|4(?:00|56|7[1-9]|8[0236-9])|5(?:55|6[2-5]|88)|6(?:3[2-578]|4[24-9]|5[34]|78|8[235-9])|7(?:[0479]7|2[0167]|3[45]|8[7-9])|8(?:[2-57-9]8|6[48])|9(?:2[29]|6[79]|7[1279]|8[7-9]|9[78]))\\d{4}', + , + , + , + '6713001234', + , + , + , + [7], + ], + [ + , + , + '671(?:3(?:00|3[39]|4[349]|55|6[26])|4(?:00|56|7[1-9]|8[0236-9])|5(?:55|6[2-5]|88)|6(?:3[2-578]|4[24-9]|5[34]|78|8[235-9])|7(?:[0479]7|2[0167]|3[45]|8[7-9])|8(?:[2-57-9]8|6[48])|9(?:2[29]|6[79]|7[1279]|8[7-9]|9[78]))\\d{4}', + , + , + , + '6713001234', + , + , + , + [7], + ], + [, , '8(?:00|33|44|55|66|77|88)[2-9]\\d{6}', , , , '8002123456'], + [, , '900[2-9]\\d{6}', , , , '9002123456'], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[12]|33|44|66|77|88)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , , , , , , , , [-1]], + 'GU', + 1, + '011', + '1', + , + , + '1|([3-9]\\d{6})$', + '671$1', + , + 1, + , + , + [, , , , , , , , , [-1]], + , + '671', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + GW: [ + , + [, , '[49]\\d{8}|4\\d{6}', , , , , , , [7, 9]], + [, , '443\\d{6}', , , , '443201234', , , [9]], + [, , '9(?:5\\d|6[569]|77)\\d{6}', , , , '955012345', , , [9]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '40\\d{5}', , , , '4012345', , , [7]], + 'GW', + 245, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{3})(\\d{4})', '$1 $2', ['40']], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['[49]']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + GY: [ + , + [, , '9008\\d{3}|(?:[2-467]\\d\\d|862)\\d{4}', , , , , , , [7]], + [ + , + , + '(?:2(?:1[6-9]|2[0-35-9]|3[1-4]|5[3-9]|6\\d|7[0-24-79])|3(?:2[25-9]|3\\d)|4(?:4[0-24]|5[56])|77[1-57])\\d{4}', + , + , + , + '2201234', + ], + [, , '(?:6\\d\\d|70[015-7])\\d{4}', , , , '6091234'], + [, , '(?:289|862)\\d{4}', , , , '2891234'], + [, , '9008\\d{3}', , , , '9008123'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'GY', + 592, + '001', + , + , + , + , + , + , + , + [[, '(\\d{3})(\\d{4})', '$1 $2', ['[2-46-9]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + HK: [ + , + [ + , + , + '8[0-46-9]\\d{6,7}|9\\d{4,7}|(?:[2-7]|9\\d{3})\\d{7}', + , + , + , + , + , + , + [5, 6, 7, 8, 9, 11], + ], + [ + , + , + '(?:2(?:[13-9]\\d|2[013-9])\\d|3(?:(?:[1569][0-24-9]|4[0-246-9]|7[0-24-69])\\d|8(?:4[0-8]|5[0-5]|9\\d))|58(?:0[1-8]|1[2-9]))\\d{4}', + , + , + , + '21234567', + , + , + [8], + ], + [ + , + , + '(?:46(?:[07][0-7]|1[0-6]|4[0-57-9]|6[0-4])|573[0-6]|6(?:26[013-8]|66[0-3])|70(?:7[1-5]|8[0-4])|848[015-9]|929[03-9])\\d{4}|(?:4(?:40|6[2358])|5(?:[1-59][0-46-9]|6[0-4689]|7[0-24679])|6(?:0[1-9]|[13-59]\\d|[268][0-57-9]|7[0-79])|84[09]|9(?:0[1-9]|1[02-9]|[2358][0-8]|[467]\\d))\\d{5}', + , + , + , + '51234567', + , + , + [8], + ], + [, , '800\\d{6}', , , , '800123456', , , [9]], + [, , '900(?:[0-24-9]\\d{7}|3\\d{1,4})', , , , '90012345678', , , [5, 6, 7, 8, 11]], + [, , , , , , , , , [-1]], + [ + , + , + '8(?:1[0-4679]\\d|2(?:[0-36]\\d|7[0-4])|3(?:[034]\\d|2[09]|70))\\d{4}', + , + , + , + '81123456', + , + , + [8], + ], + [, , , , , , , , , [-1]], + 'HK', + 852, + '00(?:30|5[09]|[126-9]?)', + , + , + , + , + , + '00', + , + [ + [, '(\\d{3})(\\d{2,5})', '$1 $2', ['900', '9003']], + [, '(\\d{4})(\\d{4})', '$1 $2', ['[2-7]|8[1-4]|9(?:0[1-9]|[1-8])']], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['8']], + [, '(\\d{3})(\\d{2})(\\d{3})(\\d{3})', '$1 $2 $3 $4', ['9']], + ], + , + [ + , + , + '7(?:1(?:0[0-38]|1[0-3679]|3[013]|69|9[0136])|2(?:[02389]\\d|1[18]|7[27-9])|3(?:[0-38]\\d|7[0-369]|9[2357-9])|47\\d|5(?:[178]\\d|5[0-5])|6(?:0[0-7]|2[236-9]|[35]\\d)|7(?:[27]\\d|8[7-9])|8(?:[23689]\\d|7[1-9])|9(?:[025]\\d|6[0-246-8]|7[0-36-9]|8[238]))\\d{4}', + , + , + , + '71123456', + , + , + [8], + ], + , + , + [, , , , , , , , , [-1]], + [, , '30(?:0[1-9]|[15-7]\\d|2[047]|89)\\d{4}', , , , '30161234', , , [8]], + , + , + [, , , , , , , , , [-1]], + ], + HN: [ + , + [, , '8\\d{10}|[237-9]\\d{7}', , , , , , , [8, 11]], + [ + , + , + '2(?:2(?:0[0-39]|1[1-367]|[23]\\d|4[03-6]|5[57]|6[245]|7[0135689]|8[01346-9]|9[0-2])|4(?:0[78]|2[3-59]|3[13-9]|4[0-68]|5[1-35])|5(?:0[7-9]|16|4[03-5]|5\\d|6[014-6]|7[04]|80)|6(?:[056]\\d|17|2[067]|3[04]|4[0-378]|[78][0-8]|9[01])|7(?:6[46-9]|7[02-9]|8[034]|91)|8(?:79|8[0-357-9]|9[1-57-9]))\\d{4}', + , + , + , + '22123456', + , + , + [8], + ], + [, , '[37-9]\\d{7}', , , , '91234567', , , [8]], + [, , '8002\\d{7}', , , , '80021234567', , , [11]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'HN', + 504, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{4})(\\d{4})', '$1-$2', ['[237-9]']], + [, '(\\d{3})(\\d{4})(\\d{4})', '$1 $2 $3', ['8']], + ], + [[, '(\\d{4})(\\d{4})', '$1-$2', ['[237-9]']]], + [, , , , , , , , , [-1]], + , + , + [, , '8002\\d{7}', , , , , , , [11]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + HR: [ + , + [ + , + , + '(?:[24-69]\\d|3[0-79])\\d{7}|80\\d{5,7}|[1-79]\\d{7}|6\\d{5,6}', + , + , + , + , + , + , + [6, 7, 8, 9], + ], + [ + , + , + '1\\d{7}|(?:2[0-3]|3[1-5]|4[02-47-9]|5[1-3])\\d{6,7}', + , + , + , + '12345678', + , + , + [8, 9], + [6, 7], + ], + [ + , + , + '9(?:751\\d{5}|8\\d{6,7})|9(?:0[1-9]|[1259]\\d|7[0679])\\d{6}', + , + , + , + '921234567', + , + , + [8, 9], + ], + [, , '80[01]\\d{4,6}', , , , '800123456', , , [7, 8, 9]], + [, , '6[01459]\\d{6}|6[01]\\d{4,5}', , , , '611234', , , [6, 7, 8]], + [, , , , , , , , , [-1]], + [, , '7[45]\\d{6}', , , , '74123456', , , [8]], + [, , , , , , , , , [-1]], + 'HR', + 385, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{2})(\\d{2})(\\d{2,3})', '$1 $2 $3', ['6[01]'], '0$1'], + [, '(\\d{3})(\\d{2})(\\d{2,3})', '$1 $2 $3', ['8'], '0$1'], + [, '(\\d)(\\d{4})(\\d{3})', '$1 $2 $3', ['1'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['[67]'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['9'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['[2-5]'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['8'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '62\\d{6,7}|72\\d{6}', , , , '62123456', , , [8, 9]], + , + , + [, , , , , , , , , [-1]], + ], + HT: [ + , + [, , '[2-489]\\d{7}', , , , , , , [8]], + [, , '2(?:2\\d|5[1-5]|81|9[149])\\d{5}', , , , '22453300'], + [, , '[34]\\d{7}', , , , '34101234'], + [, , '8\\d{7}', , , , '80012345'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '9(?:[67][0-4]|8[0-3589]|9\\d)\\d{5}', , , , '98901234'], + 'HT', + 509, + '00', + , + , + , + , + , + , + , + [[, '(\\d{2})(\\d{2})(\\d{4})', '$1 $2 $3', ['[2-489]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + HU: [ + , + [, , '[235-7]\\d{8}|[1-9]\\d{7}', , , , , , , [8, 9], [6, 7]], + [ + , + , + '(?:1\\d|[27][2-9]|3[2-7]|4[24-9]|5[2-79]|6[23689]|8[2-57-9]|9[2-69])\\d{6}', + , + , + , + '12345678', + , + , + [8], + [6, 7], + ], + [, , '(?:[257]0|3[01])\\d{7}', , , , '201234567', , , [9]], + [, , '(?:[48]0\\d|680[29])\\d{5}', , , , '80123456'], + [, , '9[01]\\d{6}', , , , '90123456', , , [8]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '21\\d{7}', , , , '211234567', , , [9]], + 'HU', + 36, + '00', + '06', + , + , + '06', + , + , + , + [ + [, '(\\d)(\\d{3})(\\d{4})', '$1 $2 $3', ['1'], '(06 $1)'], + [ + , + '(\\d{2})(\\d{3})(\\d{3})', + '$1 $2 $3', + ['[27][2-9]|3[2-7]|4[24-9]|5[2-79]|6|8[2-57-9]|9[2-69]'], + '(06 $1)', + ], + [, '(\\d{2})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['[2-9]'], '06 $1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , '(?:[48]0\\d|680[29])\\d{5}'], + [, , '38\\d{7}', , , , '381234567', , , [9]], + , + , + [, , , , , , , , , [-1]], + ], + ID: [ + , + [ + , + , + '(?:(?:00[1-9]|8\\d)\\d{4}|[1-36])\\d{6}|00\\d{10}|[1-9]\\d{8,10}|[2-9]\\d{7}', + , + , + , + , + , + , + [7, 8, 9, 10, 11, 12, 13], + [5, 6], + ], + [ + , + , + '2[124]\\d{7,8}|619\\d{8}|2(?:1(?:14|500)|2\\d{3})\\d{3}|61\\d{5,8}|(?:2(?:[35][1-4]|6[0-8]|7[1-6]|8\\d|9[1-8])|3(?:1|[25][1-8]|3[1-68]|4[1-3]|6[1-3568]|7[0-469]|8\\d)|4(?:0[1-589]|1[01347-9]|2[0-36-8]|3[0-24-68]|43|5[1-378]|6[1-5]|7[134]|8[1245])|5(?:1[1-35-9]|2[25-8]|3[124-9]|4[1-3589]|5[1-46]|6[1-8])|6(?:[25]\\d|3[1-69]|4[1-6])|7(?:02|[125][1-9]|[36]\\d|4[1-8]|7[0-36-9])|9(?:0[12]|1[013-8]|2[0-479]|5[125-8]|6[23679]|7[159]|8[01346]))\\d{5,8}', + , + , + , + '218350123', + , + , + [7, 8, 9, 10, 11], + [5, 6], + ], + [, , '8[1-35-9]\\d{7,10}', , , , '812345678', , , [9, 10, 11, 12]], + [ + , + , + '00[17]803\\d{7}|(?:177\\d|800)\\d{5,7}|001803\\d{6}', + , + , + , + '8001234567', + , + , + [8, 9, 10, 11, 12, 13], + ], + [, , '809\\d{7}', , , , '8091234567', , , [10]], + [, , '804\\d{7}', , , , '8041234567', , , [10]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'ID', + 62, + '00[89]', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d)(\\d{3})(\\d{3})', '$1 $2 $3', ['15']], + [, '(\\d{2})(\\d{5,9})', '$1 $2', ['2[124]|[36]1'], '(0$1)'], + [, '(\\d{3})(\\d{5,7})', '$1 $2', ['800'], '0$1'], + [, '(\\d{3})(\\d{5,8})', '$1 $2', ['[2-79]'], '(0$1)'], + [, '(\\d{3})(\\d{3,4})(\\d{3})', '$1-$2-$3', ['8[1-35-9]'], '0$1'], + [, '(\\d{3})(\\d{6,8})', '$1 $2', ['1'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['804'], '0$1'], + [, '(\\d{3})(\\d)(\\d{3})(\\d{3})', '$1 $2 $3 $4', ['80'], '0$1'], + [, '(\\d{3})(\\d{4})(\\d{4,5})', '$1-$2-$3', ['8'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3 $4', ['001']], + [, '(\\d{2})(\\d{4})(\\d{3})(\\d{4})', '$1 $2 $3 $4', ['0']], + ], + [ + [, '(\\d)(\\d{3})(\\d{3})', '$1 $2 $3', ['15']], + [, '(\\d{2})(\\d{5,9})', '$1 $2', ['2[124]|[36]1'], '(0$1)'], + [, '(\\d{3})(\\d{5,7})', '$1 $2', ['800'], '0$1'], + [, '(\\d{3})(\\d{5,8})', '$1 $2', ['[2-79]'], '(0$1)'], + [, '(\\d{3})(\\d{3,4})(\\d{3})', '$1-$2-$3', ['8[1-35-9]'], '0$1'], + [, '(\\d{3})(\\d{6,8})', '$1 $2', ['1'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['804'], '0$1'], + [, '(\\d{3})(\\d)(\\d{3})(\\d{3})', '$1 $2 $3 $4', ['80'], '0$1'], + [, '(\\d{3})(\\d{4})(\\d{4,5})', '$1-$2-$3', ['8'], '0$1'], + ], + [, , , , , , , , , [-1]], + , + , + [, , '001803\\d{6,7}|(?:007803\\d|8071)\\d{6}', , , , , , , [10, 12, 13]], + [, , '(?:1500|8071\\d{3})\\d{3}', , , , '8071123456', , , [7, 10]], + , + , + [, , , , , , , , , [-1]], + ], + IE: [ + , + [ + , + , + '(?:1\\d|[2569])\\d{6,8}|4\\d{6,9}|7\\d{8}|8\\d{8,9}', + , + , + , + , + , + , + [7, 8, 9, 10], + [5, 6], + ], + [ + , + , + '(?:1\\d|21)\\d{6,7}|(?:2[24-9]|4(?:0[24]|5\\d|7)|5(?:0[45]|1\\d|8)|6(?:1\\d|[237-9])|9(?:1\\d|[35-9]))\\d{5}|(?:23|4(?:[1-469]|8\\d)|5[23679]|6[4-6]|7[14]|9[04])\\d{7}', + , + , + , + '2212345', + , + , + , + [5, 6], + ], + [, , '8(?:22|[35-9]\\d)\\d{6}', , , , '850123456', , , [9]], + [, , '1800\\d{6}', , , , '1800123456', , , [10]], + [, , '15(?:1[2-8]|[2-8]0|9[089])\\d{6}', , , , '1520123456', , , [10]], + [, , '18[59]0\\d{6}', , , , '1850123456', , , [10]], + [, , '700\\d{6}', , , , '700123456', , , [9]], + [, , '76\\d{7}', , , , '761234567', , , [9]], + 'IE', + 353, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{2})(\\d{5})', '$1 $2', ['2[24-9]|47|58|6[237-9]|9[35-9]'], '(0$1)'], + [, '(\\d{3})(\\d{5})', '$1 $2', ['[45]0'], '(0$1)'], + [, '(\\d)(\\d{3,4})(\\d{4})', '$1 $2 $3', ['1'], '(0$1)'], + [, '(\\d{2})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['[2569]|4[1-69]|7[14]'], '(0$1)'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['70'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['81'], '(0$1)'], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['[78]'], '0$1'], + [, '(\\d{4})(\\d{3})(\\d{3})', '$1 $2 $3', ['1']], + [, '(\\d{2})(\\d{4})(\\d{4})', '$1 $2 $3', ['4'], '(0$1)'], + [, '(\\d{2})(\\d)(\\d{3})(\\d{4})', '$1 $2 $3 $4', ['8'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , '18[59]0\\d{6}', , , , , , , [10]], + [, , '818\\d{6}', , , , '818123456', , , [9]], + , + , + [ + , + , + '88210[1-9]\\d{4}|8(?:[35-79]5\\d\\d|8(?:[013-9]\\d\\d|2(?:[01][1-9]|[2-9]\\d)))\\d{5}', + , + , + , + '8551234567', + , + , + [10], + ], + ], + IL: [ + , + [, , '1\\d{6}(?:\\d{3,5})?|[57]\\d{8}|[1-489]\\d{7}', , , , , , , [7, 8, 9, 10, 11, 12]], + [ + , + , + '153\\d{8,9}|29[1-9]\\d{5}|(?:2[0-8]|[3489]\\d)\\d{6}', + , + , + , + '21234567', + , + , + [8, 11, 12], + [7], + ], + [ + , + , + '5(?:(?:[02368]\\d|[19][2-9]|4[1-9])\\d|5(?:01|1[79]|2[2-9]|3[0-3]|4[34]|5[015689]|6[6-8]|7[0-267]|8[7-9]|9[1-9]))\\d{5}', + , + , + , + '502345678', + , + , + [9], + ], + [, , '1(?:255|80[019]\\d{3})\\d{3}', , , , '1800123456', , , [7, 10]], + [, , '1212\\d{4}|1(?:200|9(?:0[0-2]|19))\\d{6}', , , , '1919123456', , , [8, 10]], + [, , '1700\\d{6}', , , , '1700123456', , , [10]], + [, , , , , , , , , [-1]], + [ + , + , + '7(?:380|8(?:33|55|77|81))\\d{5}|7(?:18|2[23]|3[237]|47|6[58]|7\\d|82|9[235-9])\\d{6}', + , + , + , + '771234567', + , + , + [9], + ], + 'IL', + 972, + '0(?:0|1[2-9])', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{4})(\\d{3})', '$1-$2', ['125']], + [, '(\\d{4})(\\d{2})(\\d{2})', '$1-$2-$3', ['121']], + [, '(\\d)(\\d{3})(\\d{4})', '$1-$2-$3', ['[2-489]'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1-$2-$3', ['[57]'], '0$1'], + [, '(\\d{4})(\\d{3})(\\d{3})', '$1-$2-$3', ['12']], + [, '(\\d{4})(\\d{6})', '$1-$2', ['159']], + [, '(\\d)(\\d{3})(\\d{3})(\\d{3})', '$1-$2-$3-$4', ['1[7-9]']], + [, '(\\d{3})(\\d{1,2})(\\d{3})(\\d{4})', '$1-$2 $3-$4', ['15']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , '1700\\d{6}', , , , , , , [10]], + [, , '1599\\d{6}', , , , '1599123456', , , [10]], + , + , + [, , '151\\d{8,9}', , , , '15112340000', , , [11, 12]], + ], + IM: [ + , + [, , '1624\\d{6}|(?:[3578]\\d|90)\\d{8}', , , , , , , [10], [6]], + [, , '1624(?:230|[5-8]\\d\\d)\\d{3}', , , , '1624756789', , , , [6]], + [, , '76245[06]\\d{4}|7(?:4576|[59]24\\d|624[0-4689])\\d{5}', , , , '7924123456'], + [, , '808162\\d{4}', , , , '8081624567'], + [ + , + , + '8(?:440[49]06|72299\\d)\\d{3}|(?:8(?:45|70)|90[0167])624\\d{4}', + , + , + , + '9016247890', + ], + [, , , , , , , , , [-1]], + [, , '70\\d{8}', , , , '7012345678'], + [, , '56\\d{8}', , , , '5612345678'], + 'IM', + 44, + '00', + '0', + , + , + '0|([25-8]\\d{5})$', + '1624$1', + , + , + , + , + [, , , , , , , , , [-1]], + , + '74576|(?:16|7[56])24', + [, , , , , , , , , [-1]], + [ + , + , + '3440[49]06\\d{3}|(?:3(?:08162|3\\d{4}|45624|7(?:0624|2299))|55\\d{4})\\d{4}', + , + , + , + '5512345678', + ], + , + , + [, , , , , , , , , [-1]], + ], + IN: [ + , + [ + , + , + '(?:000800|[2-9]\\d\\d)\\d{7}|1\\d{7,12}', + , + , + , + , + , + , + [8, 9, 10, 11, 12, 13], + [6, 7], + ], + [ + , + , + '2717(?:[2-7]\\d|95)\\d{4}|(?:271[0-689]|782[0-6])[2-7]\\d{5}|(?:170[24]|2(?:(?:[02][2-79]|90)\\d|80[13468])|(?:3(?:23|80)|683|79[1-7])\\d|4(?:20[24]|72[2-8])|552[1-7])\\d{6}|(?:11|33|4[04]|80)[2-7]\\d{7}|(?:342|674|788)(?:[0189][2-7]|[2-7]\\d)\\d{5}|(?:1(?:2[0-249]|3[0-25]|4[145]|[59][14]|6[014]|7[1257]|8[01346])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568]|9[14])|3(?:26|4[13]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[014-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|2[14]|3[134]|4[47]|5[15]|[67]1)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91))[2-7]\\d{6}|(?:1(?:2[35-8]|3[346-9]|4[236-9]|[59][0235-9]|6[235-9]|7[34689]|8[257-9])|2(?:1[134689]|3[24-8]|4[2-8]|5[25689]|6[2-4679]|7[3-79]|8[2-479]|9[235-9])|3(?:01|1[79]|2[1245]|4[5-8]|5[125689]|6[235-7]|7[157-9]|8[2-46-8])|4(?:1[14578]|2[5689]|3[2-467]|5[4-7]|6[35]|73|8[2689]|9[2389])|5(?:[16][146-9]|2[14-8]|3[1346]|4[14-69]|5[46]|7[2-4]|8[2-8]|9[246])|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[124-6])|7(?:1[013-9]|2[0235-9]|3[2679]|4[1-35689]|5[2-46-9]|[67][02-9]|8[013-7]|9[089])|8(?:1[1357-9]|2[235-8]|3[03-57-9]|4[0-24-9]|5\\d|6[2457-9]|7[1-6]|8[1256]|9[2-4]))\\d[2-7]\\d{5}', + , + , + , + '7410410123', + , + , + [10], + [6, 7, 8], + ], + [ + , + , + '(?:61279|7(?:887[02-9]|9(?:313|79[07-9]))|8(?:079[04-9]|(?:84|91)7[02-8]))\\d{5}|(?:6(?:12|[2-47]1|5[17]|6[13]|80)[0189]|7(?:1(?:2[0189]|9[0-5])|2(?:[14][017-9]|8[0-59])|3(?:2[5-8]|[34][017-9]|9[016-9])|4(?:1[015-9]|[29][89]|39|8[389])|5(?:[15][017-9]|2[04-9]|9[7-9])|6(?:0[0-47]|1[0-257-9]|2[0-4]|3[19]|5[4589])|70[0289]|88[089]|97[02-8])|8(?:0(?:6[67]|7[02-8])|70[017-9]|84[01489]|91[0-289]))\\d{6}|(?:7(?:31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[0189]\\d|7[02-8])\\d{5}|(?:6(?:[09]\\d|1[04679]|2[03689]|3[05-9]|4[0489]|50|6[069]|7[07]|8[7-9])|7(?:0\\d|2[0235-79]|3[05-8]|40|5[0346-8]|6[6-9]|7[1-9]|8[0-79]|9[089])|8(?:0[01589]|1[0-57-9]|2[235-9]|3[03-57-9]|[45]\\d|6[02457-9]|7[1-69]|8[0-25-9]|9[02-9])|9\\d\\d)\\d{7}|(?:6(?:(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|8[124-6])\\d|7(?:[235689]\\d|4[0189]))|7(?:1(?:[013-8]\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-5])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\d|5[0-367])|70[13-7]|881))[0189]\\d{5}', + , + , + , + '8123456789', + , + , + [10], + ], + [, , '000800\\d{7}|1(?:600\\d{6}|80(?:0\\d{4,9}|3\\d{9}))', , , , '1800123456'], + [, , '186[12]\\d{9}', , , , '1861123456789', , , [13]], + [, , '1860\\d{7}', , , , '18603451234', , , [11]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'IN', + 91, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{7})', '$1', ['575']], + [ + , + '(\\d{8})', + '$1', + [ + '5(?:0|2[23]|3[03]|[67]1|88)', + '5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|888)', + '5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|8888)', + ], + , + , + 1, + ], + [, '(\\d{4})(\\d{4,5})', '$1 $2', ['180', '1800'], , , 1], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['140'], , , 1], + [ + , + '(\\d{2})(\\d{4})(\\d{4})', + '$1 $2 $3', + [ + '11|2[02]|33|4[04]|79[1-7]|80[2-46]', + '11|2[02]|33|4[04]|79(?:[1-6]|7[19])|80(?:[2-4]|6[0-589])', + '11|2[02]|33|4[04]|79(?:[124-6]|3(?:[02-9]|1[0-24-9])|7(?:1|9[1-6]))|80(?:[2-4]|6[0-589])', + ], + '0$1', + , + 1, + ], + [ + , + '(\\d{3})(\\d{3})(\\d{4})', + '$1 $2 $3', + [ + '1(?:2[0-249]|3[0-25]|4[145]|[68]|7[1257])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|5[12]|[78]1)|6(?:12|[2-4]1|5[17]|6[13]|80)|7(?:12|3[134]|4[47]|61|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)|(?:43|59|75)[15]|(?:1[59]|29|67|72)[14]', + '1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|674|7(?:(?:2[14]|3[34]|5[15])[2-6]|61[346]|88[0-8])|8(?:70[2-6]|84[235-7]|91[3-7])|(?:1(?:29|60|8[06])|261|552|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))[2-7]', + '1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12(?:[2-6]|7[0-8])|74[2-7])|7(?:(?:2[14]|5[15])[2-6]|3171|61[346]|88(?:[2-7]|82))|8(?:70[2-6]|84(?:[2356]|7[19])|91(?:[3-6]|7[19]))|73[134][2-6]|(?:74[47]|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[2-6]|7[19])|(?:1(?:29|60|8[06])|261|552|6(?:[2-4]1|5[17]|6[13]|7(?:1|4[0189])|80)|7(?:12|88[01]))[2-7]', + ], + '0$1', + , + 1, + ], + [ + , + '(\\d{4})(\\d{3})(\\d{3})', + '$1 $2 $3', + [ + '1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2[2457-9]|3[2-5]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1[013-9]|28|3[129]|4[1-35689]|5[29]|6[02-5]|70)|807', + '1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2(?:[2457]|84|95)|3(?:[2-4]|55)|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1(?:[013-8]|9[6-9])|28[6-8]|3(?:17|2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4|5[0-367])|70[13-7])|807[19]', + '1(?:[2-479]|5(?:[0236-9]|5[013-9]))|[2-5]|6(?:2(?:84|95)|355|83)|73179|807(?:1|9[1-3])|(?:1552|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[124-6])\\d|7(?:1(?:[013-8]\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\d|5[0-367])|70[13-7]))[2-7]', + ], + '0$1', + , + 1, + ], + [, '(\\d{5})(\\d{5})', '$1 $2', ['[6-9]'], '0$1', , 1], + [, '(\\d{4})(\\d{2,4})(\\d{4})', '$1 $2 $3', ['1(?:6|8[06])', '1(?:6|8[06]0)'], , , 1], + [, '(\\d{3})(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3 $4', ['0']], + [, '(\\d{4})(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3 $4', ['18'], , , 1], + ], + [ + [ + , + '(\\d{8})', + '$1', + [ + '5(?:0|2[23]|3[03]|[67]1|88)', + '5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|888)', + '5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|8888)', + ], + , + , + 1, + ], + [, '(\\d{4})(\\d{4,5})', '$1 $2', ['180', '1800'], , , 1], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['140'], , , 1], + [ + , + '(\\d{2})(\\d{4})(\\d{4})', + '$1 $2 $3', + [ + '11|2[02]|33|4[04]|79[1-7]|80[2-46]', + '11|2[02]|33|4[04]|79(?:[1-6]|7[19])|80(?:[2-4]|6[0-589])', + '11|2[02]|33|4[04]|79(?:[124-6]|3(?:[02-9]|1[0-24-9])|7(?:1|9[1-6]))|80(?:[2-4]|6[0-589])', + ], + '0$1', + , + 1, + ], + [ + , + '(\\d{3})(\\d{3})(\\d{4})', + '$1 $2 $3', + [ + '1(?:2[0-249]|3[0-25]|4[145]|[68]|7[1257])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|5[12]|[78]1)|6(?:12|[2-4]1|5[17]|6[13]|80)|7(?:12|3[134]|4[47]|61|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)|(?:43|59|75)[15]|(?:1[59]|29|67|72)[14]', + '1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|674|7(?:(?:2[14]|3[34]|5[15])[2-6]|61[346]|88[0-8])|8(?:70[2-6]|84[235-7]|91[3-7])|(?:1(?:29|60|8[06])|261|552|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))[2-7]', + '1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12(?:[2-6]|7[0-8])|74[2-7])|7(?:(?:2[14]|5[15])[2-6]|3171|61[346]|88(?:[2-7]|82))|8(?:70[2-6]|84(?:[2356]|7[19])|91(?:[3-6]|7[19]))|73[134][2-6]|(?:74[47]|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[2-6]|7[19])|(?:1(?:29|60|8[06])|261|552|6(?:[2-4]1|5[17]|6[13]|7(?:1|4[0189])|80)|7(?:12|88[01]))[2-7]', + ], + '0$1', + , + 1, + ], + [ + , + '(\\d{4})(\\d{3})(\\d{3})', + '$1 $2 $3', + [ + '1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2[2457-9]|3[2-5]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1[013-9]|28|3[129]|4[1-35689]|5[29]|6[02-5]|70)|807', + '1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2(?:[2457]|84|95)|3(?:[2-4]|55)|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1(?:[013-8]|9[6-9])|28[6-8]|3(?:17|2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4|5[0-367])|70[13-7])|807[19]', + '1(?:[2-479]|5(?:[0236-9]|5[013-9]))|[2-5]|6(?:2(?:84|95)|355|83)|73179|807(?:1|9[1-3])|(?:1552|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[124-6])\\d|7(?:1(?:[013-8]\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\d|5[0-367])|70[13-7]))[2-7]', + ], + '0$1', + , + 1, + ], + [, '(\\d{5})(\\d{5})', '$1 $2', ['[6-9]'], '0$1', , 1], + [, '(\\d{4})(\\d{2,4})(\\d{4})', '$1 $2 $3', ['1(?:6|8[06])', '1(?:6|8[06]0)'], , , 1], + [, '(\\d{4})(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3 $4', ['18'], , , 1], + ], + [, , , , , , , , , [-1]], + , + , + [, , '1(?:600\\d{6}|800\\d{4,9})|(?:000800|18(?:03\\d\\d|6(?:0|[12]\\d\\d)))\\d{7}'], + [, , '140\\d{7}', , , , '1409305260', , , [10]], + , + , + [, , , , , , , , , [-1]], + ], + IO: [ + , + [, , '3\\d{6}', , , , , , , [7]], + [, , '37\\d{5}', , , , '3709100'], + [, , '38\\d{5}', , , , '3801234'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'IO', + 246, + '00', + , + , + , + , + , + , + , + [[, '(\\d{3})(\\d{4})', '$1 $2', ['3']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + IQ: [ + , + [, , '(?:1|7\\d\\d)\\d{7}|[2-6]\\d{7,8}', , , , , , , [8, 9, 10], [6, 7]], + [ + , + , + '1\\d{7}|(?:2[13-5]|3[02367]|4[023]|5[03]|6[026])\\d{6,7}', + , + , + , + '12345678', + , + , + [8, 9], + [6, 7], + ], + [, , '7[3-9]\\d{8}', , , , '7912345678', , , [10]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'IQ', + 964, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d)(\\d{3})(\\d{4})', '$1 $2 $3', ['1'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['[2-6]'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['7'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + IR: [ + , + [, , '[1-9]\\d{9}|(?:[1-8]\\d\\d|9)\\d{3,4}', , , , , , , [4, 5, 6, 7, 10], [8]], + [ + , + , + '(?:1[137]|2[13-68]|3[1458]|4[145]|5[1468]|6[16]|7[1467]|8[13467])(?:[03-57]\\d{7}|[16]\\d{3}(?:\\d{4})?|[289]\\d{3}(?:\\d(?:\\d{3})?)?)|94(?:000[09]|2(?:121|[2689]0\\d)|30[0-2]\\d|4(?:111|40\\d))\\d{4}', + , + , + , + '2123456789', + , + , + [6, 7, 10], + [4, 5, 8], + ], + [ + , + , + '9(?:(?:0(?:[0-35]\\d|4[4-6])|(?:[13]\\d|2[0-3])\\d)\\d|9(?:(?:[0-3]\\d|4[0145])\\d|5[15]0|8(?:1\\d|88)|9(?:0[013]|[19]\\d|21|77|8[7-9])))\\d{5}', + , + , + , + '9123456789', + , + , + [10], + ], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'IR', + 98, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{4,5})', '$1', ['96'], '0$1'], + [ + , + '(\\d{2})(\\d{4,5})', + '$1 $2', + ['(?:1[137]|2[13-68]|3[1458]|4[145]|5[1468]|6[16]|7[1467]|8[13467])[12689]'], + '0$1', + ], + [, '(\\d{3})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['9'], '0$1'], + [, '(\\d{2})(\\d{4})(\\d{4})', '$1 $2 $3', ['[1-8]'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [ + , + , + '9(?:4440\\d{5}|6(?:0[12]|2[16-8]|3(?:08|[14]5|[23]|66)|4(?:0|80)|5[01]|6[89]|86|9[19]))', + , + , + , + , + , + , + [4, 5, 10], + ], + [ + , + , + '96(?:0[12]|2[16-8]|3(?:08|[14]5|[23]|66)|4(?:0|80)|5[01]|6[89]|86|9[19])', + , + , + , + '9601', + , + , + [4, 5], + ], + , + , + [, , , , , , , , , [-1]], + ], + IS: [ + , + [, , '(?:38\\d|[4-9])\\d{6}', , , , , , , [7, 9]], + [ + , + , + '(?:4(?:1[0-24-69]|2[0-7]|[37][0-8]|4[0-245]|5[0-68]|6\\d|8[0-36-8])|5(?:05|[156]\\d|2[02578]|3[0-579]|4[03-7]|7[0-2578]|8[0-35-9]|9[013-689])|872)\\d{4}', + , + , + , + '4101234', + , + , + [7], + ], + [ + , + , + '(?:38[589]\\d\\d|6(?:1[1-8]|2[0-6]|3[027-9]|4[014679]|5[0159]|6[0-69]|70|8[06-8]|9\\d)|7(?:5[057]|[6-9]\\d)|8(?:2[0-59]|[3-69]\\d|8[28]))\\d{4}', + , + , + , + '6111234', + ], + [, , '80[08]\\d{4}', , , , '8001234', , , [7]], + [ + , + , + '90(?:0\\d|1[5-79]|2[015-79]|3[135-79]|4[125-7]|5[25-79]|7[1-37]|8[0-35-7])\\d{3}', + , + , + , + '9001234', + , + , + [7], + ], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '49[0-24-79]\\d{4}', , , , '4921234', , , [7]], + 'IS', + 354, + '00|1(?:0(?:01|[12]0)|100)', + , + , + , + , + , + '00', + , + [ + [, '(\\d{3})(\\d{4})', '$1 $2', ['[4-9]']], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['3']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '809\\d{4}', , , , '8091234', , , [7]], + , + , + [, , '(?:689|8(?:7[18]|80)|95[48])\\d{4}', , , , '6891234', , , [7]], + ], + IT: [ + , + [ + , + , + '0\\d{5,10}|1\\d{8,10}|3(?:[0-8]\\d{7,10}|9\\d{7,8})|55\\d{8}|8\\d{5}(?:\\d{2,4})?', + , + , + , + , + , + , + [6, 7, 8, 9, 10, 11, 12], + ], + [ + , + , + '0669[0-79]\\d{1,6}|0(?:1(?:[0159]\\d|[27][1-5]|31|4[1-4]|6[1356]|8[2-57])|2\\d\\d|3(?:[0159]\\d|2[1-4]|3[12]|[48][1-6]|6[2-59]|7[1-7])|4(?:[0159]\\d|[23][1-9]|4[245]|6[1-5]|7[1-4]|81)|5(?:[0159]\\d|2[1-5]|3[2-6]|4[1-79]|6[4-6]|7[1-578]|8[3-8])|6(?:[0-57-9]\\d|6[0-8])|7(?:[0159]\\d|2[12]|3[1-7]|4[2-46]|6[13569]|7[13-6]|8[1-59])|8(?:[0159]\\d|2[3-578]|3[1-356]|[6-8][1-5])|9(?:[0159]\\d|[238][1-5]|4[12]|6[1-8]|7[1-6]))\\d{2,7}', + , + , + , + '0212345678', + , + , + [6, 7, 8, 9, 10, 11], + ], + [, , '3[1-9]\\d{8}|3[2-9]\\d{7}', , , , '3123456789', , , [9, 10]], + [, , '80(?:0\\d{3}|3)\\d{3}', , , , '800123456', , , [6, 9]], + [ + , + , + '(?:0878\\d{3}|89(?:2\\d|3[04]|4(?:[0-4]|[5-9]\\d\\d)|5[0-4]))\\d\\d|(?:1(?:44|6[346])|89(?:38|5[5-9]|9))\\d{6}', + , + , + , + '899123456', + , + , + [6, 8, 9, 10], + ], + [, , '84(?:[08]\\d{3}|[17])\\d{3}', , , , '848123456', , , [6, 9]], + [, , '1(?:78\\d|99)\\d{6}', , , , '1781234567', , , [9, 10]], + [, , '55\\d{8}', , , , '5512345678', , , [10]], + 'IT', + 39, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{4,5})', '$1', ['1(?:0|9[246])', '1(?:0|9(?:2[2-9]|[46]))']], + [, '(\\d{6})', '$1', ['1(?:1|92)']], + [, '(\\d{2})(\\d{4,6})', '$1 $2', ['0[26]']], + [ + , + '(\\d{3})(\\d{3,6})', + '$1 $2', + [ + '0[13-57-9][0159]|8(?:03|4[17]|9[2-5])', + '0[13-57-9][0159]|8(?:03|4[17]|9(?:2|3[04]|[45][0-4]))', + ], + ], + [, '(\\d{4})(\\d{2,6})', '$1 $2', ['0(?:[13-579][2-46-8]|8[236-8])']], + [, '(\\d{4})(\\d{4})', '$1 $2', ['894']], + [, '(\\d{2})(\\d{3,4})(\\d{4})', '$1 $2 $3', ['0[26]|5']], + [, '(\\d{3})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['1(?:44|[679])|[38]']], + [, '(\\d{3})(\\d{3,4})(\\d{4})', '$1 $2 $3', ['0[13-57-9][0159]|14']], + [, '(\\d{2})(\\d{4})(\\d{5})', '$1 $2 $3', ['0[26]']], + [, '(\\d{4})(\\d{3})(\\d{4})', '$1 $2 $3', ['0']], + [, '(\\d{3})(\\d{4})(\\d{4,5})', '$1 $2 $3', ['3']], + ], + [ + [, '(\\d{2})(\\d{4,6})', '$1 $2', ['0[26]']], + [ + , + '(\\d{3})(\\d{3,6})', + '$1 $2', + [ + '0[13-57-9][0159]|8(?:03|4[17]|9[2-5])', + '0[13-57-9][0159]|8(?:03|4[17]|9(?:2|3[04]|[45][0-4]))', + ], + ], + [, '(\\d{4})(\\d{2,6})', '$1 $2', ['0(?:[13-579][2-46-8]|8[236-8])']], + [, '(\\d{4})(\\d{4})', '$1 $2', ['894']], + [, '(\\d{2})(\\d{3,4})(\\d{4})', '$1 $2 $3', ['0[26]|5']], + [, '(\\d{3})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['1(?:44|[679])|[38]']], + [, '(\\d{3})(\\d{3,4})(\\d{4})', '$1 $2 $3', ['0[13-57-9][0159]|14']], + [, '(\\d{2})(\\d{4})(\\d{5})', '$1 $2 $3', ['0[26]']], + [, '(\\d{4})(\\d{3})(\\d{4})', '$1 $2 $3', ['0']], + [, '(\\d{3})(\\d{4})(\\d{4,5})', '$1 $2 $3', ['3']], + ], + [, , , , , , , , , [-1]], + 1, + , + [, , '848\\d{6}', , , , , , , [9]], + [, , , , , , , , , [-1]], + , + , + [, , '3[2-8]\\d{9,10}', , , , '33101234501', , , [11, 12]], + ], + JE: [ + , + [, , '1534\\d{6}|(?:[3578]\\d|90)\\d{8}', , , , , , , [10], [6]], + [, , '1534[0-24-8]\\d{5}', , , , '1534456789', , , , [6]], + [, , '7(?:(?:(?:50|82)9|937)\\d|7(?:00[378]|97[7-9]))\\d{5}', , , , '7797712345'], + [, , '80(?:07(?:35|81)|8901)\\d{4}', , , , '8007354567'], + [ + , + , + '(?:8(?:4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))|90(?:066[59]|1810|71(?:07|55)))\\d{4}', + , + , + , + '9018105678', + ], + [, , , , , , , , , [-1]], + [, , '701511\\d{4}', , , , '7015115678'], + [, , '56\\d{8}', , , , '5612345678'], + 'JE', + 44, + '00', + '0', + , + , + '0|([0-24-8]\\d{5})$', + '1534$1', + , + , + , + , + [ + , + , + '76(?:464|652)\\d{5}|76(?:0[0-2]|2[356]|34|4[01347]|5[49]|6[0-369]|77|81|9[139])\\d{6}', + , + , + , + '7640123456', + ], + , + , + [, , , , , , , , , [-1]], + [ + , + , + '(?:3(?:0(?:07(?:35|81)|8901)|3\\d{4}|4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))|55\\d{4})\\d{4}', + , + , + , + '5512345678', + ], + , + , + [, , , , , , , , , [-1]], + ], + JM: [ + , + [, , '(?:[58]\\d\\d|658|900)\\d{7}', , , , , , , [10], [7]], + [ + , + , + '8766060\\d{3}|(?:658(?:2(?:[0-8]\\d|9[0-46-9])|[3-9]\\d\\d)|876(?:52[35]|6(?:0[1-3579]|1[0237-9]|[23]\\d|40|5[06]|6[2-589]|7[05]|8[04]|9[4-9])|7(?:0[2-689]|[1-6]\\d|8[056]|9[45])|9(?:0[1-8]|1[02378]|[2-8]\\d|9[2-468])))\\d{4}', + , + , + , + '8765230123', + , + , + , + [7], + ], + [ + , + , + '(?:658295|876(?:2(?:0[2-9]|[14-9]\\d|2[013-9]|3[3-9])|[348]\\d\\d|5(?:0[1-9]|[1-9]\\d)|6(?:4[89]|6[67])|7(?:0[07]|7\\d|8[1-47-9]|9[0-36-9])|9(?:[01]9|9[0579])))\\d{4}', + , + , + , + '8762101234', + , + , + , + [7], + ], + [, , '8(?:00|33|44|55|66|77|88)[2-9]\\d{6}', , , , '8002123456'], + [, , '900[2-9]\\d{6}', , , , '9002123456'], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[12]|33|44|66|77|88)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , , , , , , , , [-1]], + 'JM', + 1, + '011', + '1', + , + , + '1', + , + , + , + , + , + [, , , , , , , , , [-1]], + , + '658|876', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + JO: [ + , + [, , '(?:(?:[2689]|7\\d)\\d|32|53)\\d{6}', , , , , , , [8, 9]], + [ + , + , + '87(?:000|90[01])\\d{3}|(?:2(?:6(?:2[0-35-9]|3[0-578]|4[24-7]|5[0-24-8]|[6-8][023]|9[0-3])|7(?:0[1-79]|10|2[014-7]|3[0-689]|4[019]|5[0-3578]))|32(?:0[1-69]|1[1-35-7]|2[024-7]|3\\d|4[0-3]|[5-7][023])|53(?:0[0-3]|[13][023]|2[0-59]|49|5[0-35-9]|6[15]|7[45]|8[1-6]|9[0-36-9])|6(?:2(?:[05]0|22)|3(?:00|33)|4(?:0[0-25]|1[2-7]|2[0569]|[38][07-9]|4[025689]|6[0-589]|7\\d|9[0-2])|5(?:[01][056]|2[034]|3[0-57-9]|4[178]|5[0-69]|6[0-35-9]|7[1-379]|8[0-68]|9[0239]))|87(?:20|7[078]|99))\\d{4}', + , + , + , + '62001234', + , + , + [8], + ], + [, , '7(?:[78][0-25-9]|9\\d)\\d{6}', , , , '790123456', , , [9]], + [, , '80\\d{6}', , , , '80012345', , , [8]], + [, , '9\\d{7}', , , , '90012345', , , [8]], + [, , '85\\d{6}', , , , '85012345', , , [8]], + [, , '70\\d{7}', , , , '700123456', , , [9]], + [, , , , , , , , , [-1]], + 'JO', + 962, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d)(\\d{3})(\\d{4})', '$1 $2 $3', ['[2356]|87'], '(0$1)'], + [, '(\\d{3})(\\d{5,6})', '$1 $2', ['[89]'], '0$1'], + [, '(\\d{2})(\\d{7})', '$1 $2', ['70'], '0$1'], + [, '(\\d)(\\d{4})(\\d{4})', '$1 $2 $3', ['7'], '0$1'], + ], + , + [, , '74(?:66|77)\\d{5}', , , , '746612345', , , [9]], + , + , + [, , , , , , , , , [-1]], + [, , '8(?:10|8\\d)\\d{5}', , , , '88101234', , , [8]], + , + , + [, , , , , , , , , [-1]], + ], + JP: [ + , + [ + , + , + '00[1-9]\\d{6,14}|[257-9]\\d{9}|(?:00|[1-9]\\d\\d)\\d{6}', + , + , + , + , + , + , + [8, 9, 10, 11, 12, 13, 14, 15, 16, 17], + ], + [ + , + , + '(?:1(?:1[235-8]|2[3-6]|3[3-9]|4[2-6]|[58][2-8]|6[2-7]|7[2-9]|9[1-9])|(?:2[2-9]|[36][1-9])\\d|4(?:[2-578]\\d|6[02-8]|9[2-59])|5(?:[2-589]\\d|6[1-9]|7[2-8])|7(?:[25-9]\\d|3[4-9]|4[02-9])|8(?:[2679]\\d|3[2-9]|4[5-9]|5[1-9]|8[03-9])|9(?:[2-58]\\d|[679][1-9]))\\d{6}', + , + , + , + '312345678', + , + , + [9], + ], + [, , '[7-9]0[1-9]\\d{7}', , , , '9012345678', , , [10]], + [ + , + , + '00777(?:[01]|5\\d)\\d\\d|(?:00(?:7778|882[1245])|(?:120|800\\d)\\d\\d)\\d{4}|00(?:37|66|78)\\d{6,13}', + , + , + , + '120123456', + ], + [, , '990\\d{6}', , , , '990123456', , , [9]], + [, , , , , , , , , [-1]], + [, , '60\\d{7}', , , , '601234567', , , [9]], + [, , '50[1-9]\\d{7}', , , , '5012345678', , , [10]], + 'JP', + 81, + '010', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{4})(\\d{4})', '$1-$2', ['007', '0077', '00777', '00777[01]']], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1-$2-$3', ['(?:12|57|99)0'], '0$1'], + [ + , + '(\\d{4})(\\d)(\\d{4})', + '$1-$2-$3', + [ + '1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|499|5(?:76|97)|746|8(?:3[89]|47|51|63)|9(?:49|80|9[16])', + '1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:76|97)9|7468|8(?:3(?:8[7-9]|96)|477|51[2-9]|636)|9(?:496|802|9(?:1[23]|69))|1(?:45|58)[67]', + '1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:769|979[2-69])|7468|8(?:3(?:8[7-9]|96[2457-9])|477|51[2-9]|636[457-9])|9(?:496|802|9(?:1[23]|69))|1(?:45|58)[67]', + ], + '0$1', + ], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1-$2-$3', ['60'], '0$1'], + [ + , + '(\\d)(\\d{4})(\\d{4})', + '$1-$2-$3', + ['[36]|4(?:2[09]|7[01])', '[36]|4(?:2(?:0|9[02-69])|7(?:0[019]|1))'], + '0$1', + ], + [ + , + '(\\d{2})(\\d{3})(\\d{4})', + '$1-$2-$3', + [ + '1(?:1|5[45]|77|88|9[69])|2(?:2[1-37]|3[0-269]|4[59]|5|6[24]|7[1-358]|8[1369]|9[0-38])|4(?:[28][1-9]|3[0-57]|[45]|6[248]|7[2-579]|9[29])|5(?:2|3[045]|4[0-369]|5[29]|8[02389]|9[0-389])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9[2-6])|8(?:2[124589]|3[27-9]|49|51|6|7[0-468]|8[68]|9[019])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9[1-489])', + '1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2(?:[127]|3[014-9])|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9[19])|62|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|8[1-9])|5(?:2|3[045]|4[0-369]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0-2469])|49|51|6(?:[0-24]|36|5[0-3589]|72|9[01459])|7[0-468]|8[68])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3[34]|4[0178]))|(?:49|55|83)[29]|(?:264|837)[016-9]|2(?:57|93)[015-9]|(?:25[0468]|422|838)[01]|(?:47[59]|59[89]|8(?:6[68]|9))[019]', + '1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3[045]|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0169])|3(?:[29]|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[23]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|72|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:8294|96)[1-3]|2(?:57|93)[015-9]|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|8292|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]', + '1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|7[015-9]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17|3[015-9]))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3[045]|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9(?:[019]|4[1-3]|6(?:[0-47-9]|5[01346-9])))|3(?:[29]|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[23]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|72|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|829(?:2|66)|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]', + ], + '0$1', + ], + [, '(\\d{3})(\\d{2})(\\d{4})', '$1-$2-$3', ['[14]|[289][2-9]|5[3-9]|7[2-4679]'], '0$1'], + [, '(\\d{4})(\\d{2})(\\d{3,4})', '$1-$2-$3', ['007', '0077']], + [, '(\\d{4})(\\d{2})(\\d{4})', '$1-$2-$3', ['008']], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1-$2-$3', ['800'], '0$1'], + [, '(\\d{2})(\\d{4})(\\d{4})', '$1-$2-$3', ['[257-9]'], '0$1'], + [, '(\\d{4})(\\d{3})(\\d{3,4})', '$1-$2-$3', ['0']], + [, '(\\d{4})(\\d{4})(\\d{4,5})', '$1-$2-$3', ['0']], + [, '(\\d{4})(\\d{5})(\\d{5,6})', '$1-$2-$3', ['0']], + [, '(\\d{4})(\\d{6})(\\d{6,7})', '$1-$2-$3', ['0']], + ], + [ + [, '(\\d{3})(\\d{3})(\\d{3})', '$1-$2-$3', ['(?:12|57|99)0'], '0$1'], + [ + , + '(\\d{4})(\\d)(\\d{4})', + '$1-$2-$3', + [ + '1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|499|5(?:76|97)|746|8(?:3[89]|47|51|63)|9(?:49|80|9[16])', + '1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:76|97)9|7468|8(?:3(?:8[7-9]|96)|477|51[2-9]|636)|9(?:496|802|9(?:1[23]|69))|1(?:45|58)[67]', + '1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:769|979[2-69])|7468|8(?:3(?:8[7-9]|96[2457-9])|477|51[2-9]|636[457-9])|9(?:496|802|9(?:1[23]|69))|1(?:45|58)[67]', + ], + '0$1', + ], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1-$2-$3', ['60'], '0$1'], + [ + , + '(\\d)(\\d{4})(\\d{4})', + '$1-$2-$3', + ['[36]|4(?:2[09]|7[01])', '[36]|4(?:2(?:0|9[02-69])|7(?:0[019]|1))'], + '0$1', + ], + [ + , + '(\\d{2})(\\d{3})(\\d{4})', + '$1-$2-$3', + [ + '1(?:1|5[45]|77|88|9[69])|2(?:2[1-37]|3[0-269]|4[59]|5|6[24]|7[1-358]|8[1369]|9[0-38])|4(?:[28][1-9]|3[0-57]|[45]|6[248]|7[2-579]|9[29])|5(?:2|3[045]|4[0-369]|5[29]|8[02389]|9[0-389])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9[2-6])|8(?:2[124589]|3[27-9]|49|51|6|7[0-468]|8[68]|9[019])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9[1-489])', + '1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2(?:[127]|3[014-9])|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9[19])|62|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|8[1-9])|5(?:2|3[045]|4[0-369]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0-2469])|49|51|6(?:[0-24]|36|5[0-3589]|72|9[01459])|7[0-468]|8[68])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3[34]|4[0178]))|(?:49|55|83)[29]|(?:264|837)[016-9]|2(?:57|93)[015-9]|(?:25[0468]|422|838)[01]|(?:47[59]|59[89]|8(?:6[68]|9))[019]', + '1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3[045]|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0169])|3(?:[29]|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[23]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|72|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:8294|96)[1-3]|2(?:57|93)[015-9]|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|8292|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]', + '1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|7[015-9]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17|3[015-9]))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3[045]|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9(?:[019]|4[1-3]|6(?:[0-47-9]|5[01346-9])))|3(?:[29]|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[23]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|72|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|829(?:2|66)|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]', + ], + '0$1', + ], + [, '(\\d{3})(\\d{2})(\\d{4})', '$1-$2-$3', ['[14]|[289][2-9]|5[3-9]|7[2-4679]'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1-$2-$3', ['800'], '0$1'], + [, '(\\d{2})(\\d{4})(\\d{4})', '$1-$2-$3', ['[257-9]'], '0$1'], + ], + [, , '20\\d{8}', , , , '2012345678', , , [10]], + , + , + [, , '00(?:777(?:[01]|(?:5|8\\d)\\d)|882[1245]\\d\\d)\\d\\d|00(?:37|66|78)\\d{6,13}'], + [, , '570\\d{6}', , , , '570123456', , , [9]], + , + , + [, , , , , , , , , [-1]], + ], + KE: [ + , + [ + , + , + '(?:[17]\\d\\d|900)\\d{6}|(?:2|80)0\\d{6,7}|[4-6]\\d{6,8}', + , + , + , + , + , + , + [7, 8, 9, 10], + ], + [ + , + , + '(?:4[245]|5[1-79]|6[01457-9])\\d{5,7}|(?:4[136]|5[08]|62)\\d{7}|(?:[24]0|66)\\d{6,7}', + , + , + , + '202012345', + , + , + [7, 8, 9], + ], + [, , '(?:1(?:0[0-6]|1[0-5]|2[014])|7\\d\\d)\\d{6}', , , , '712123456', , , [9]], + [, , '800[2-8]\\d{5,6}', , , , '800223456', , , [9, 10]], + [, , '900[02-9]\\d{5}', , , , '900223456', , , [9]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'KE', + 254, + '000', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{2})(\\d{5,7})', '$1 $2', ['[24-6]'], '0$1'], + [, '(\\d{3})(\\d{6})', '$1 $2', ['[17]'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['[89]'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + KG: [ + , + [, , '8\\d{9}|(?:[235-8]\\d|99)\\d{7}', , , , , , , [9, 10], [5, 6]], + [ + , + , + '312(?:5[0-79]\\d|9(?:[0-689]\\d|7[0-24-9]))\\d{3}|(?:3(?:1(?:2[0-46-8]|3[1-9]|47|[56]\\d)|2(?:22|3[0-479]|6[0-7])|4(?:22|5[6-9]|6\\d)|5(?:22|3[4-7]|59|6\\d)|6(?:22|5[35-7]|6\\d)|7(?:22|3[468]|4[1-9]|59|[67]\\d)|9(?:22|4[1-8]|6\\d))|6(?:09|12|2[2-4])\\d)\\d{5}', + , + , + , + '312123456', + , + , + [9], + [5, 6], + ], + [ + , + , + '312(?:58\\d|973)\\d{3}|(?:2(?:0[0-35]|2\\d)|5[0-24-7]\\d|7(?:[07]\\d|55)|880|99[05-9])\\d{6}', + , + , + , + '700123456', + , + , + [9], + ], + [, , '800\\d{6,7}', , , , '800123456'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'KG', + 996, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{4})(\\d{5})', '$1 $2', ['3(?:1[346]|[24-79])'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['[235-79]|88'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d)(\\d{2,3})', '$1 $2 $3 $4', ['8'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + KH: [ + , + [, , '1\\d{9}|[1-9]\\d{7,8}', , , , , , , [8, 9, 10], [6, 7]], + [ + , + , + '23(?:4(?:[2-4]|[56]\\d)|[568]\\d\\d)\\d{4}|23[236-9]\\d{5}|(?:2[4-6]|3[2-6]|4[2-4]|[5-7][2-5])(?:(?:[237-9]|4[56]|5\\d)\\d{5}|6\\d{5,6})', + , + , + , + '23756789', + , + , + [8, 9], + [6, 7], + ], + [ + , + , + '(?:(?:1[28]|3[18]|9[67])\\d|6[016-9]|7(?:[07-9]|[16]\\d)|8(?:[013-79]|8\\d))\\d{6}|(?:1\\d|9[0-57-9])\\d{6}|(?:2[3-6]|3[2-6]|4[2-4]|[5-7][2-5])48\\d{5}', + , + , + , + '91234567', + , + , + [8, 9], + ], + [, , '1800(?:1\\d|2[019])\\d{4}', , , , '1800123456', , , [10]], + [, , '1900(?:1\\d|2[09])\\d{4}', , , , '1900123456', , , [10]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'KH', + 855, + '00[14-9]', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{2})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['[1-9]'], '0$1'], + [, '(\\d{4})(\\d{3})(\\d{3})', '$1 $2 $3', ['1']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + KI: [ + , + [, , '(?:[37]\\d|6[0-79])\\d{6}|(?:[2-48]\\d|50)\\d{3}', , , , , , , [5, 8]], + [ + , + , + '(?:[24]\\d|3[1-9]|50|65(?:02[12]|12[56]|22[89]|[3-5]00)|7(?:27\\d\\d|3100|5(?:02[12]|12[56]|22[89]|[34](?:00|81)|500))|8[0-5])\\d{3}', + , + , + , + '31234', + ], + [ + , + , + '(?:63\\d{3}|73(?:0[0-5]\\d|140))\\d{3}|[67]200[01]\\d{3}', + , + , + , + '72001234', + , + , + [8], + ], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '30(?:0[01]\\d\\d|12(?:11|20))\\d\\d', , , , '30010000', , , [8]], + 'KI', + 686, + '00', + '0', + , + , + '0', + , + , + , + , + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + KM: [ + , + [, , '[3478]\\d{6}', , , , , , , [7], [4]], + [, , '7[4-7]\\d{5}', , , , '7712345', , , , [4]], + [, , '[34]\\d{6}', , , , '3212345'], + [, , , , , , , , , [-1]], + [, , '8\\d{6}', , , , '8001234'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'KM', + 269, + '00', + , + , + , + , + , + , + , + [[, '(\\d{3})(\\d{2})(\\d{2})', '$1 $2 $3', ['[3478]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + KN: [ + , + [, , '(?:[58]\\d\\d|900)\\d{7}', , , , , , , [10], [7]], + [ + , + , + '869(?:2(?:29|36)|302|4(?:6[015-9]|70)|56[5-7])\\d{4}', + , + , + , + '8692361234', + , + , + , + [7], + ], + [, , '869(?:48[89]|55[6-8]|66\\d|76[02-7])\\d{4}', , , , '8697652917', , , , [7]], + [, , '8(?:00|33|44|55|66|77|88)[2-9]\\d{6}', , , , '8002123456'], + [, , '900[2-9]\\d{6}', , , , '9002123456'], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[12]|33|44|66|77|88)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , , , , , , , , [-1]], + 'KN', + 1, + '011', + '1', + , + , + '1|([2-7]\\d{6})$', + '869$1', + , + , + , + , + [, , , , , , , , , [-1]], + , + '869', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + KP: [ + , + [, , '85\\d{6}|(?:19\\d|[2-7])\\d{7}', , , , , , , [8, 10], [6, 7]], + [ + , + , + '(?:(?:195|2)\\d|3[19]|4[159]|5[37]|6[17]|7[39]|85)\\d{6}', + , + , + , + '21234567', + , + , + , + [6, 7], + ], + [, , '19[1-3]\\d{7}', , , , '1921234567', , , [10]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'KP', + 850, + '00|99', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{2})(\\d{3})(\\d{3})', '$1 $2 $3', ['8'], '0$1'], + [, '(\\d)(\\d{3})(\\d{4})', '$1 $2 $3', ['[2-7]'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['1'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , '238[02-9]\\d{4}|2(?:[0-24-9]\\d|3[0-79])\\d{5}', , , , , , , [8]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + KR: [ + , + [ + , + , + '00[1-9]\\d{8,11}|(?:[12]|5\\d{3})\\d{7}|[13-6]\\d{9}|(?:[1-6]\\d|80)\\d{7}|[3-6]\\d{4,5}|(?:00|7)0\\d{8}', + , + , + , + , + , + , + [5, 6, 8, 9, 10, 11, 12, 13, 14], + [3, 4, 7], + ], + [ + , + , + '(?:2|3[1-3]|[46][1-4]|5[1-5])[1-9]\\d{6,7}|(?:3[1-3]|[46][1-4]|5[1-5])1\\d{2,3}', + , + , + , + '22123456', + , + , + [5, 6, 8, 9, 10], + [3, 4, 7], + ], + [ + , + , + '1(?:05(?:[0-8]\\d|9[0-6])|22[13]\\d)\\d{4,5}|1(?:0[1-46-9]|[16-9]\\d|2[013-9])\\d{6,7}', + , + , + , + '1020000000', + , + , + [9, 10], + ], + [ + , + , + '00(?:308\\d{6,7}|798\\d{7,9})|(?:00368|80)\\d{7}', + , + , + , + '801234567', + , + , + [9, 11, 12, 13, 14], + ], + [, , '60[2-9]\\d{6}', , , , '602345678', , , [9]], + [, , , , , , , , , [-1]], + [, , '50\\d{8,9}', , , , '5012345678', , , [10, 11]], + [, , '70\\d{8}', , , , '7012345678', , , [10]], + 'KR', + 82, + '00(?:[125689]|3(?:[46]5|91)|7(?:00|27|3|55|6[126]))', + '0', + , + , + '0(8(?:[1-46-8]|5\\d\\d))?', + , + , + , + [ + [, '(\\d{5})', '$1', ['1[016-9]1', '1[016-9]11', '1[016-9]114'], '0$1'], + [, '(\\d{2})(\\d{3,4})', '$1-$2', ['(?:3[1-3]|[46][1-4]|5[1-5])1'], '0$1', '0$CC-$1'], + [, '(\\d{4})(\\d{4})', '$1-$2', ['1']], + [, '(\\d)(\\d{3,4})(\\d{4})', '$1-$2-$3', ['2'], '0$1', '0$CC-$1'], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1-$2-$3', ['60|8'], '0$1', '0$CC-$1'], + [, '(\\d{2})(\\d{3,4})(\\d{4})', '$1-$2-$3', ['[1346]|5[1-5]'], '0$1', '0$CC-$1'], + [, '(\\d{2})(\\d{4})(\\d{4})', '$1-$2-$3', ['[57]'], '0$1', '0$CC-$1'], + [, '(\\d{5})(\\d{3})(\\d{3})', '$1 $2 $3', ['003', '0030']], + [, '(\\d{2})(\\d{5})(\\d{4})', '$1-$2-$3', ['5'], '0$1', '0$CC-$1'], + [, '(\\d{5})(\\d{3,4})(\\d{4})', '$1 $2 $3', ['0']], + [, '(\\d{5})(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3 $4', ['0']], + ], + [ + [, '(\\d{2})(\\d{3,4})', '$1-$2', ['(?:3[1-3]|[46][1-4]|5[1-5])1'], '0$1', '0$CC-$1'], + [, '(\\d{4})(\\d{4})', '$1-$2', ['1']], + [, '(\\d)(\\d{3,4})(\\d{4})', '$1-$2-$3', ['2'], '0$1', '0$CC-$1'], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1-$2-$3', ['60|8'], '0$1', '0$CC-$1'], + [, '(\\d{2})(\\d{3,4})(\\d{4})', '$1-$2-$3', ['[1346]|5[1-5]'], '0$1', '0$CC-$1'], + [, '(\\d{2})(\\d{4})(\\d{4})', '$1-$2-$3', ['[57]'], '0$1', '0$CC-$1'], + [, '(\\d{2})(\\d{5})(\\d{4})', '$1-$2-$3', ['5'], '0$1', '0$CC-$1'], + ], + [, , '15\\d{7,8}', , , , '1523456789', , , [9, 10]], + , + , + [, , '00(?:3(?:08\\d{6,7}|68\\d{7})|798\\d{7,9})', , , , , , , [11, 12, 13, 14]], + [ + , + , + '1(?:5(?:22|33|44|66|77|88|99)|6(?:[07]0|44|6[16]|88)|8(?:00|33|55|77|99))\\d{4}', + , + , + , + '15441234', + , + , + [8], + ], + , + , + [, , , , , , , , , [-1]], + ], + KW: [ + , + [, , '18\\d{5}|(?:[2569]\\d|41)\\d{6}', , , , , , , [7, 8]], + [ + , + , + '2(?:[23]\\d\\d|4(?:[1-35-9]\\d|44)|5(?:0[034]|[2-46]\\d|5[1-3]|7[1-7]))\\d{4}', + , + , + , + '22345678', + , + , + [8], + ], + [ + , + , + '(?:41\\d\\d|5(?:(?:[05]\\d|1[0-7]|6[56])\\d|2(?:22|5[25])|7(?:55|77)|88[58])|6(?:(?:0[034679]|5[015-9]|6\\d)\\d|222|333|444|7(?:0[013-9]|[67]\\d)|888|9(?:[069]\\d|3[039]))|9(?:(?:0[09]|22|[4679]\\d|8[057-9])\\d|1(?:1[01]|99)|3(?:00|33)|5(?:00|5\\d)))\\d{4}', + , + , + , + '50012345', + , + , + [8], + ], + [, , '18\\d{5}', , , , '1801234', , , [7]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'KW', + 965, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{4})(\\d{3,4})', '$1 $2', ['[169]|2(?:[235]|4[1-35-9])|52']], + [, '(\\d{3})(\\d{5})', '$1 $2', ['[245]']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + KY: [ + , + [, , '(?:345|[58]\\d\\d|900)\\d{7}', , , , , , , [10], [7]], + [ + , + , + '345(?:2(?:22|3[23]|44|66)|333|444|6(?:23|38|40)|7(?:30|4[35-79]|6[6-9]|77)|8(?:00|1[45]|25|[48]8)|9(?:14|4[035-9]))\\d{4}', + , + , + , + '3452221234', + , + , + , + [7], + ], + [ + , + , + '345(?:32[1-9]|42[0-4]|5(?:1[67]|2[5-79]|4[6-9]|50|76)|649|9(?:1[679]|2[2-9]|3[06-9]|90))\\d{4}', + , + , + , + '3453231234', + , + , + , + [7], + ], + [, , '8(?:00|33|44|55|66|77|88)[2-9]\\d{6}', , , , '8002345678'], + [, , '(?:345976|900[2-9]\\d\\d)\\d{4}', , , , '9002345678'], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[12]|33|44|66|77|88)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , , , , , , , , [-1]], + 'KY', + 1, + '011', + '1', + , + , + '1|([2-9]\\d{6})$', + '345$1', + , + , + , + , + [, , '345849\\d{4}', , , , '3458491234'], + , + '345', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + KZ: [ + , + [, , '(?:33622|8\\d{8})\\d{5}|[78]\\d{9}', , , , , , , [10, 14], [5, 6, 7]], + [ + , + , + '(?:33622|7(?:1(?:0(?:[23]\\d|4[0-3]|59|63)|1(?:[23]\\d|4[0-79]|59)|2(?:[23]\\d|59)|3(?:2\\d|3[0-79]|4[0-35-9]|59)|4(?:[24]\\d|3[013-9]|5[1-9])|5(?:2\\d|3[1-9]|4[0-7]|59)|6(?:[2-4]\\d|5[19]|61)|72\\d|8(?:[27]\\d|3[1-46-9]|4[0-5]))|2(?:1(?:[23]\\d|4[46-9]|5[3469])|2(?:2\\d|3[0679]|46|5[12679])|3(?:[2-4]\\d|5[139])|4(?:2\\d|3[1-35-9]|59)|5(?:[23]\\d|4[0-246-8]|59|61)|6(?:2\\d|3[1-9]|4[0-4]|59)|7(?:[2379]\\d|40|5[279])|8(?:[23]\\d|4[0-3]|59)|9(?:2\\d|3[124578]|59))))\\d{5}', + , + , + , + '7123456789', + , + , + [10], + [5, 6, 7], + ], + [, , '7(?:0[0-25-8]|47|6[0-4]|7[15-8]|85)\\d{7}', , , , '7710009998', , , [10]], + [, , '8(?:00|108\\d{3})\\d{7}', , , , '8001234567'], + [, , '809\\d{7}', , , , '8091234567', , , [10]], + [, , , , , , , , , [-1]], + [, , '808\\d{7}', , , , '8081234567', , , [10]], + [, , '751\\d{7}', , , , '7511234567', , , [10]], + 'KZ', + 7, + '810', + '8', + , + , + '8', + , + '8~10', + , + , + , + [, , , , , , , , , [-1]], + , + '33|7', + [, , '751\\d{7}', , , , , , , [10]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + LA: [ + , + [, , '[23]\\d{9}|3\\d{8}|(?:[235-8]\\d|41)\\d{6}', , , , , , , [8, 9, 10], [6]], + [, , '(?:2[13]|[35-7][14]|41|8[1468])\\d{6}', , , , '21212862', , , [8], [6]], + [, , '(?:20(?:[239]\\d|5[24-9]|7[6-8]|88)|302\\d)\\d{6}', , , , '2023123456', , , [10]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'LA', + 856, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{2})(\\d{3})(\\d{3})', '$1 $2 $3', ['2[13]|3[14]|[4-8]'], '0$1'], + [, '(\\d{2})(\\d{2})(\\d{2})(\\d{3})', '$1 $2 $3 $4', ['30[013-9]'], '0$1'], + [, '(\\d{2})(\\d{2})(\\d{3})(\\d{3})', '$1 $2 $3 $4', ['[23]'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '30[013-9]\\d{6}', , , , '301234567', , , [9]], + , + , + [, , , , , , , , , [-1]], + ], + LB: [ + , + [, , '[27-9]\\d{7}|[13-9]\\d{6}', , , , , , , [7, 8]], + [ + , + , + '7(?:62|8[0-7]|9[04-9])\\d{4}|(?:[14-69]\\d|2(?:[14-69]\\d|[78][1-9])|7[2-57]|8[02-9])\\d{5}', + , + , + , + '1123456', + ], + [ + , + , + '793(?:[01]\\d|2[0-4])\\d{3}|(?:(?:3|81)\\d|7(?:[01]\\d|6[013-9]|8[89]|9[12]))\\d{5}', + , + , + , + '71123456', + ], + [, , , , , , , , , [-1]], + [, , '9[01]\\d{6}', , , , '90123456', , , [8]], + [, , '80\\d{6}', , , , '80123456', , , [8]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'LB', + 961, + '00', + '0', + , + , + '0', + , + , + , + [ + [ + , + '(\\d)(\\d{3})(\\d{3})', + '$1 $2 $3', + ['[13-69]|7(?:[2-57]|62|8[0-7]|9[04-9])|8[02-9]'], + '0$1', + ], + [, '(\\d{2})(\\d{3})(\\d{3})', '$1 $2 $3', ['[27-9]']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + LC: [ + , + [, , '(?:[58]\\d\\d|758|900)\\d{7}', , , , , , , [10], [7]], + [ + , + , + '758(?:234|4(?:30|5\\d|6[2-9]|8[0-2])|57[0-2]|(?:63|75)8)\\d{4}', + , + , + , + '7584305678', + , + , + , + [7], + ], + [ + , + , + '758(?:28[4-7]|384|4(?:6[01]|8[4-9])|5(?:1[89]|20|84)|7(?:1[2-9]|2\\d|3[0-3])|812)\\d{4}', + , + , + , + '7582845678', + , + , + , + [7], + ], + [, , '8(?:00|33|44|55|66|77|88)[2-9]\\d{6}', , , , '8002123456'], + [, , '900[2-9]\\d{6}', , , , '9002123456'], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[12]|33|44|66|77|88)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , , , , , , , , [-1]], + 'LC', + 1, + '011', + '1', + , + , + '1|([2-8]\\d{6})$', + '758$1', + , + , + , + , + [, , , , , , , , , [-1]], + , + '758', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + LI: [ + , + [, , '[68]\\d{8}|(?:[2378]\\d|90)\\d{5}', , , , , , , [7, 9]], + [ + , + , + '(?:2(?:01|1[27]|2[02]|3\\d|6[02-578]|96)|3(?:[24]0|33|7[0135-7]|8[048]|9[0269]))\\d{4}', + , + , + , + '2345678', + , + , + [7], + ], + [ + , + , + '(?:6(?:4(?:5[4-9]|[6-9]\\d)|5[0-4]\\d|6(?:[0245]\\d|[17]0|3[7-9]))\\d|7(?:[37-9]\\d|42|56))\\d{4}', + , + , + , + '660234567', + ], + [, , '8002[28]\\d\\d|80(?:05\\d|9)\\d{4}', , , , '8002222'], + [, , '90(?:02[258]|1(?:23|3[14])|66[136])\\d\\d', , , , '9002222', , , [7]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'LI', + 423, + '00', + '0', + , + , + '0|(1001)', + , + , + , + [ + [ + , + '(\\d{3})(\\d{2})(\\d{2})', + '$1 $2 $3', + ['[2379]|8(?:0[09]|7)', '[2379]|8(?:0(?:02|9)|7)'], + , + '$CC $1', + ], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['8']], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['69'], , '$CC $1'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['6'], , '$CC $1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '870(?:28|87)\\d\\d', , , , '8702812', , , [7]], + , + , + [, , '697(?:42|56|[78]\\d)\\d{4}', , , , '697861234', , , [9]], + ], + LK: [ + , + [, , '[1-9]\\d{8}', , , , , , , [9], [7]], + [ + , + , + '(?:12[2-9]|602|8[12]\\d|9(?:1\\d|22|9[245]))\\d{6}|(?:11|2[13-7]|3[1-8]|4[157]|5[12457]|6[35-7])[2-57]\\d{6}', + , + , + , + '112345678', + , + , + , + [7], + ], + [, , '7(?:[0-25-8]\\d|4[0-4])\\d{6}', , , , '712345678'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'LK', + 94, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['7'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['[1-689]'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '1973\\d{5}', , , , '197312345'], + , + , + [, , , , , , , , , [-1]], + ], + LR: [ + , + [, , '(?:2|33|5\\d|77|88)\\d{7}|[4-6]\\d{6}', , , , , , , [7, 8, 9]], + [, , '(?:2\\d{3}|33333)\\d{4}', , , , '21234567', , , [8, 9]], + [ + , + , + '(?:(?:330|555|(?:77|88)\\d)\\d|4[67])\\d{5}|[56]\\d{6}', + , + , + , + '770123456', + , + , + [7, 9], + ], + [, , , , , , , , , [-1]], + [, , '332(?:02|[34]\\d)\\d{4}', , , , '332021234', , , [9]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'LR', + 231, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d)(\\d{3})(\\d{3})', '$1 $2 $3', ['[4-6]'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{3})', '$1 $2 $3', ['2'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['[3578]'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + LS: [ + , + [, , '(?:[256]\\d\\d|800)\\d{5}', , , , , , , [8]], + [, , '2\\d{7}', , , , '22123456'], + [, , '[56]\\d{7}', , , , '50123456'], + [, , '800[256]\\d{4}', , , , '80021234'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'LS', + 266, + '00', + , + , + , + , + , + , + , + [[, '(\\d{4})(\\d{4})', '$1 $2', ['[2568]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + LT: [ + , + [, , '(?:[3469]\\d|52|[78]0)\\d{6}', , , , , , , [8]], + [, , '(?:3[1478]|4[124-6]|52)\\d{6}', , , , '31234567'], + [, , '6\\d{7}', , , , '61234567'], + [, , '80[02]\\d{5}', , , , '80012345'], + [, , '9(?:0[0239]|10)\\d{5}', , , , '90012345'], + [, , '808\\d{5}', , , , '80812345'], + [, , '70[05]\\d{5}', , , , '70012345'], + [, , '[89]01\\d{5}', , , , '80123456'], + 'LT', + 370, + '00', + '8', + , + , + '[08]', + , + , + , + [ + [, '(\\d)(\\d{3})(\\d{4})', '$1 $2 $3', ['52[0-7]'], '(8-$1)', , 1], + [, '(\\d{3})(\\d{2})(\\d{3})', '$1 $2 $3', ['[7-9]'], '8 $1', , 1], + [, '(\\d{2})(\\d{6})', '$1 $2', ['37|4(?:[15]|6[1-8])'], '(8-$1)', , 1], + [, '(\\d{3})(\\d{5})', '$1 $2', ['[3-6]'], '(8-$1)', , 1], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '70[67]\\d{5}', , , , '70712345'], + , + , + [, , , , , , , , , [-1]], + ], + LU: [ + , + [ + , + , + '35[013-9]\\d{4,8}|6\\d{8}|35\\d{2,4}|(?:[2457-9]\\d|3[0-46-9])\\d{2,9}', + , + , + , + , + , + , + [4, 5, 6, 7, 8, 9, 10, 11], + ], + [ + , + , + '(?:35[013-9]|80[2-9]|90[89])\\d{1,8}|(?:2[2-9]|3[0-46-9]|[457]\\d|8[13-9]|9[2-579])\\d{2,9}', + , + , + , + '27123456', + ], + [, , '6(?:[269][18]|5[1568]|7[189]|81)\\d{6}', , , , '628123456', , , [9]], + [, , '800\\d{5}', , , , '80012345', , , [8]], + [, , '90[015]\\d{5}', , , , '90012345', , , [8]], + [, , '801\\d{5}', , , , '80112345', , , [8]], + [, , , , , , , , , [-1]], + [, , '20(?:1\\d{5}|[2-689]\\d{1,7})', , , , '20201234', , , [4, 5, 6, 7, 8, 9, 10]], + 'LU', + 352, + '00', + , + , + , + '(15(?:0[06]|1[12]|[35]5|4[04]|6[26]|77|88|99)\\d)', + , + , + , + [ + [ + , + '(\\d{2})(\\d{3})', + '$1 $2', + ['2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])'], + , + '$CC $1', + ], + [ + , + '(\\d{2})(\\d{2})(\\d{2})', + '$1 $2 $3', + ['2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])'], + , + '$CC $1', + ], + [, '(\\d{2})(\\d{2})(\\d{3})', '$1 $2 $3', ['20[2-689]'], , '$CC $1'], + [ + , + '(\\d{2})(\\d{2})(\\d{2})(\\d{1,2})', + '$1 $2 $3 $4', + ['2(?:[0367]|4[3-8])'], + , + '$CC $1', + ], + [, '(\\d{3})(\\d{2})(\\d{3})', '$1 $2 $3', ['80[01]|90[015]'], , '$CC $1'], + [, '(\\d{2})(\\d{2})(\\d{2})(\\d{3})', '$1 $2 $3 $4', ['20'], , '$CC $1'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['6'], , '$CC $1'], + [ + , + '(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{1,2})', + '$1 $2 $3 $4 $5', + ['2(?:[0367]|4[3-8])'], + , + '$CC $1', + ], + [ + , + '(\\d{2})(\\d{2})(\\d{2})(\\d{1,5})', + '$1 $2 $3 $4', + ['[3-57]|8[13-9]|9(?:0[89]|[2-579])|(?:2|80)[2-9]'], + , + '$CC $1', + ], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + LV: [ + , + [, , '(?:[268]\\d|90)\\d{6}', , , , , , , [8]], + [, , '6\\d{7}', , , , '63123456'], + [, , '2\\d{7}', , , , '21234567'], + [, , '80\\d{6}', , , , '80123456'], + [, , '90\\d{6}', , , , '90123456'], + [, , '81\\d{6}', , , , '81123456'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'LV', + 371, + '00', + , + , + , + , + , + , + , + [[, '(\\d{2})(\\d{3})(\\d{3})', '$1 $2 $3', ['[269]|8[01]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + LY: [ + , + [, , '[2-9]\\d{8}', , , , , , , [9], [7]], + [ + , + , + '(?:2(?:0[56]|[1-6]\\d|7[124579]|8[124])|3(?:1\\d|2[2356])|4(?:[17]\\d|2[1-357]|5[2-4]|8[124])|5(?:[1347]\\d|2[1-469]|5[13-5]|8[1-4])|6(?:[1-479]\\d|5[2-57]|8[1-5])|7(?:[13]\\d|2[13-79])|8(?:[124]\\d|5[124]|84))\\d{6}', + , + , + , + '212345678', + , + , + , + [7], + ], + [, , '9[1-6]\\d{7}', , , , '912345678'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'LY', + 218, + '00', + '0', + , + , + '0', + , + , + , + [[, '(\\d{2})(\\d{7})', '$1-$2', ['[2-9]'], '0$1']], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + MA: [ + , + [, , '[5-8]\\d{8}', , , , , , , [9]], + [ + , + , + '5(?:29(?:[189][05]|2[29]|3[01])|38[89][05])\\d{4}|5(?:2(?:[0-25-7]\\d|3[1-578]|4[02-46-8]|8[0235-7]|90)|3(?:[0-47]\\d|5[02-9]|6[02-8]|80|9[3-9])|(?:4[067]|5[03])\\d)\\d{5}', + , + , + , + '520123456', + ], + [, , '(?:6(?:[0-79]\\d|8[0-247-9])|7(?:[017]\\d|6[0-367]))\\d{6}', , , , '650123456'], + [, , '80\\d{7}', , , , '801234567'], + [, , '89\\d{7}', , , , '891234567'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '592(?:4[0-2]|93)\\d{4}', , , , '592401234'], + 'MA', + 212, + '00', + '0', + , + , + '0', + , + , + , + [ + [ + , + '(\\d{5})(\\d{4})', + '$1-$2', + ['5(?:29|38)', '5(?:29|38)[89]', '5(?:29|38)[89]0'], + '0$1', + ], + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['5[45]'], '0$1'], + [ + , + '(\\d{4})(\\d{5})', + '$1-$2', + ['5(?:2[2-489]|3[5-9]|9)|892', '5(?:2(?:[2-49]|8[235-9])|3[5-9]|9)|892'], + '0$1', + ], + [, '(\\d{2})(\\d{7})', '$1-$2', ['8'], '0$1'], + [, '(\\d{3})(\\d{6})', '$1-$2', ['[5-7]'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + 1, + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + MC: [ + , + [, , '(?:[3489]|6\\d)\\d{7}', , , , , , , [8, 9]], + [, , '(?:870|9[2-47-9]\\d)\\d{5}', , , , '99123456', , , [8]], + [, , '4(?:[46]\\d|5[1-9])\\d{5}|(?:3|6\\d)\\d{7}', , , , '612345678'], + [, , '(?:800|90\\d)\\d{5}', , , , '90123456', , , [8]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'MC', + 377, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{3})(\\d{2})', '$1 $2 $3', ['87']], + [, '(\\d{2})(\\d{3})(\\d{3})', '$1 $2 $3', ['4'], '0$1'], + [, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[389]']], + [, '(\\d)(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4 $5', ['6'], '0$1'], + ], + [ + [, '(\\d{2})(\\d{3})(\\d{3})', '$1 $2 $3', ['4'], '0$1'], + [, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[389]']], + [, '(\\d)(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4 $5', ['6'], '0$1'], + ], + [, , , , , , , , , [-1]], + , + , + [, , '8[07]0\\d{5}', , , , , , , [8]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + MD: [ + , + [, , '(?:[235-7]\\d|[89]0)\\d{6}', , , , , , , [8]], + [, , '(?:(?:2[1-9]|3[1-79])\\d|5(?:33|5[257]))\\d{5}', , , , '22212345'], + [, , '562\\d{5}|(?:6\\d|7[16-9])\\d{6}', , , , '62112345'], + [, , '800\\d{5}', , , , '80012345'], + [, , '90[056]\\d{5}', , , , '90012345'], + [, , '808\\d{5}', , , , '80812345'], + [, , , , , , , , , [-1]], + [, , '3[08]\\d{6}', , , , '30123456'], + 'MD', + 373, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{5})', '$1 $2', ['[89]'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{3})', '$1 $2 $3', ['22|3'], '0$1'], + [, '(\\d{3})(\\d{2})(\\d{3})', '$1 $2 $3', ['[25-7]'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '803\\d{5}', , , , '80312345'], + , + , + [, , , , , , , , , [-1]], + ], + ME: [ + , + [, , '(?:20|[3-79]\\d)\\d{6}|80\\d{6,7}', , , , , , , [8, 9], [6]], + [ + , + , + '(?:20[2-8]|3(?:[0-2][2-7]|3[24-7])|4(?:0[2-467]|1[2467])|5(?:0[2467]|1[24-7]|2[2-467]))\\d{5}', + , + , + , + '30234567', + , + , + [8], + [6], + ], + [, , '6(?:[07-9]\\d|3[024]|6[0-25])\\d{5}', , , , '67622901', , , [8]], + [, , '80(?:[0-2578]|9\\d)\\d{5}', , , , '80080002'], + [, , '9(?:4[1568]|5[178])\\d{5}', , , , '94515151', , , [8]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '78[1-49]\\d{5}', , , , '78108780', , , [8]], + 'ME', + 382, + '00', + '0', + , + , + '0', + , + , + , + [[, '(\\d{2})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['[2-9]'], '0$1']], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '77[1-9]\\d{5}', , , , '77273012', , , [8]], + , + , + [, , , , , , , , , [-1]], + ], + MF: [ + , + [, , '(?:590|(?:69|80)\\d|976)\\d{6}', , , , , , , [9]], + [, , '590(?:0[079]|[14]3|[27][79]|30|5[0-268]|87)\\d{4}', , , , '590271234'], + [, , '69(?:0\\d\\d|1(?:2[2-9]|3[0-5]))\\d{4}', , , , '690001234'], + [, , '80[0-5]\\d{6}', , , , '800012345'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '976[01]\\d{5}', , , , '976012345'], + 'MF', + 590, + '00', + '0', + , + , + '0', + , + , + , + , + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + MG: [ + , + [, , '[23]\\d{8}', , , , , , , [9], [7]], + [ + , + , + '2072[29]\\d{4}|20(?:2\\d|4[47]|5[3467]|6[279]|7[35]|8[268]|9[245])\\d{5}', + , + , + , + '202123456', + , + , + , + [7], + ], + [, , '3[2-489]\\d{7}', , , , '321234567'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '22\\d{7}', , , , '221234567'], + 'MG', + 261, + '00', + '0', + , + , + '0|([24-9]\\d{6})$', + '20$1', + , + , + [[, '(\\d{2})(\\d{2})(\\d{3})(\\d{2})', '$1 $2 $3 $4', ['[23]'], '0$1']], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + MH: [ + , + [, , '329\\d{4}|(?:[256]\\d|45)\\d{5}', , , , , , , [7]], + [, , '(?:247|528|625)\\d{4}', , , , '2471234'], + [, , '(?:(?:23|54)5|329|45[56])\\d{4}', , , , '2351234'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '635\\d{4}', , , , '6351234'], + 'MH', + 692, + '011', + '1', + , + , + '1', + , + , + , + [[, '(\\d{3})(\\d{4})', '$1-$2', ['[2-6]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + MK: [ + , + [, , '[2-578]\\d{7}', , , , , , , [8], [6, 7]], + [ + , + , + '(?:(?:2(?:62|77)0|3444)\\d|4[56]440)\\d{3}|(?:34|4[357])700\\d{3}|(?:2(?:[23]\\d|5[0-578]|6[01]|82)|3(?:1[3-68]|[23][2-68]|4[23568])|4(?:[23][2-68]|4[3-68]|5[2568]|6[25-8]|7[24-68]|8[4-68]))\\d{5}', + , + , + , + '22012345', + , + , + , + [6, 7], + ], + [ + , + , + '7(?:3555|4(?:60\\d|747)|94(?:[01]\\d|2[0-4]))\\d{3}|7(?:[0-25-8]\\d|3[1-4]|42|9[23])\\d{5}', + , + , + , + '72345678', + ], + [, , '800\\d{5}', , , , '80012345'], + [, , '5[02-9]\\d{6}', , , , '50012345'], + [, , '8(?:0[1-9]|[1-9]\\d)\\d{5}', , , , '80123456'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'MK', + 389, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d)(\\d{3})(\\d{4})', '$1 $2 $3', ['2|34[47]|4(?:[37]7|5[47]|64)'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{3})', '$1 $2 $3', ['[347]'], '0$1'], + [, '(\\d{3})(\\d)(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[58]'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + ML: [ + , + [, , '[24-9]\\d{7}', , , , , , , [8]], + [ + , + , + '2(?:07[0-8]|12[67])\\d{4}|(?:2(?:02|1[4-689])|4(?:0[0-4]|4[1-39]))\\d{5}', + , + , + , + '20212345', + ], + [, , '2(?:0(?:01|79)|17\\d)\\d{4}|(?:5[01]|[679]\\d|8[239])\\d{6}', , , , '65012345'], + [, , '80\\d{6}', , , , '80012345'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'ML', + 223, + '00', + , + , + , + , + , + , + , + [ + [ + , + '(\\d{4})', + '$1', + ['67[057-9]|74[045]', '67(?:0[09]|[59]9|77|8[89])|74(?:0[02]|44|55)'], + ], + [, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[24-9]']], + ], + [[, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[24-9]']]], + [, , , , , , , , , [-1]], + , + , + [, , '80\\d{6}'], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + MM: [ + , + [ + , + , + '1\\d{5,7}|95\\d{6}|(?:[4-7]|9[0-46-9])\\d{6,8}|(?:2|8\\d)\\d{5,8}', + , + , + , + , + , + , + [6, 7, 8, 9, 10], + [5], + ], + [ + , + , + '(?:1(?:(?:2\\d|3[56]|[89][0-6])\\d|4(?:2[2-469]|39|46|6[25]|7[0-3]|83)|6)|2(?:2(?:00|8[34])|4(?:0\\d|2[246]|39|46|62|7[0-3]|83)|51\\d\\d)|4(?:2(?:2\\d\\d|48[0-3])|3(?:20\\d|4(?:70|83)|56)|420\\d|5470)|6(?:0(?:[23]|88\\d)|(?:124|[56]2\\d)\\d|247[23]|3(?:20\\d|470)|4(?:2[04]\\d|47[23])|7(?:(?:3\\d|8[01459])\\d|4(?:39|60|7[013]))))\\d{4}|5(?:2(?:2\\d{5,6}|47[023]\\d{4})|(?:347[23]|4(?:2(?:1|86)|470)|522\\d|6(?:20\\d|483)|7(?:20\\d|48[0-2])|8(?:20\\d|47[02])|9(?:20\\d|47[01]))\\d{4})|7(?:(?:0470|4(?:25\\d|470)|5(?:202|470|96\\d))\\d{4}|1(?:20\\d{4,5}|4(?:70|83)\\d{4}))|8(?:1(?:2\\d{5,6}|4(?:10|7[01]\\d)\\d{3})|2(?:2\\d{5,6}|(?:320|490\\d)\\d{3})|(?:3(?:2\\d\\d|470)|4[24-7]|5(?:2\\d|4[1-9]|51)\\d|6[23])\\d{4})|(?:1[2-6]\\d|4(?:2[24-8]|3[2-7]|[46][2-6]|5[3-5])|5(?:[27][2-8]|3[2-68]|4[24-8]|5[23]|6[2-4]|8[24-7]|9[2-7])|6(?:[19]20|42[03-6]|(?:52|7[45])\\d)|7(?:[04][24-8]|[15][2-7]|22|3[2-4])|8(?:1[2-689]|2[2-8]|[35]2\\d))\\d{4}|25\\d{5,6}|(?:2[2-9]|6(?:1[2356]|[24][2-6]|3[24-6]|5[2-4]|6[2-8]|7[235-7]|8[245]|9[24])|8(?:3[24]|5[245]))\\d{4}', + , + , + , + '1234567', + , + , + [6, 7, 8, 9], + [5], + ], + [ + , + , + '(?:17[01]|9(?:2(?:[0-4]|[56]\\d\\d)|(?:3(?:[0-36]|4\\d)|(?:6\\d|8[89]|9[4-8])\\d|7(?:3|40|[5-9]\\d))\\d|4(?:(?:[0245]\\d|[1379])\\d|88)|5[0-6])\\d)\\d{4}|9[69]1\\d{6}|9(?:[68]\\d|9[089])\\d{5}', + , + , + , + '92123456', + , + , + [7, 8, 9, 10], + ], + [, , '80080(?:[01][1-9]|2\\d)\\d{3}', , , , '8008001234', , , [10]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '1333\\d{4}|[12]468\\d{4}', , , , '13331234', , , [8]], + 'MM', + 95, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d)(\\d{2})(\\d{3})', '$1 $2 $3', ['16|2'], '0$1'], + [ + , + '(\\d{2})(\\d{2})(\\d{3})', + '$1 $2 $3', + ['[45]|6(?:0[23]|[1-689]|7[235-7])|7(?:[0-4]|5[2-7])|8[1-6]'], + '0$1', + ], + [, '(\\d)(\\d{3})(\\d{3,4})', '$1 $2 $3', ['[12]'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['[4-7]|8[1-35]'], '0$1'], + [, '(\\d)(\\d{3})(\\d{4,6})', '$1 $2 $3', ['9(?:2[0-4]|[35-9]|4[137-9])'], '0$1'], + [, '(\\d)(\\d{4})(\\d{4})', '$1 $2 $3', ['2'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['8'], '0$1'], + [, '(\\d)(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3 $4', ['92'], '0$1'], + [, '(\\d)(\\d{5})(\\d{4})', '$1 $2 $3', ['9'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + MN: [ + , + [, , '[12]\\d{7,9}|[57-9]\\d{7}', , , , , , , [8, 9, 10], [4, 5, 6]], + [ + , + , + '[12]2[1-3]\\d{5,6}|7(?:0[0-5]\\d|128)\\d{4}|(?:[12](?:1|27)|5[368])\\d{6}|[12](?:3[2-8]|4[2-68]|5[1-4689])\\d{6,7}', + , + , + , + '53123456', + , + , + , + [4, 5, 6], + ], + [, , '(?:83[01]|920)\\d{5}|(?:5[05]|8[05689]|9[013-9])\\d{6}', , , , '88123456', , , [8]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '712[0-79]\\d{4}|7(?:1[013-9]|[5-8]\\d)\\d{5}', , , , '75123456', , , [8]], + 'MN', + 976, + '001', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{2})(\\d{2})(\\d{4})', '$1 $2 $3', ['[12]1'], '0$1'], + [, '(\\d{4})(\\d{4})', '$1 $2', ['[57-9]']], + [, '(\\d{3})(\\d{5,6})', '$1 $2', ['[12]2[1-3]'], '0$1'], + [ + , + '(\\d{4})(\\d{5,6})', + '$1 $2', + ['[12](?:27|3[2-8]|4[2-68]|5[1-4689])', '[12](?:27|3[2-8]|4[2-68]|5[1-4689])[0-3]'], + '0$1', + ], + [, '(\\d{5})(\\d{4,5})', '$1 $2', ['[12]'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + MO: [ + , + [, , '0800\\d{3}|(?:28|[68]\\d)\\d{6}', , , , , , , [7, 8]], + [, , '(?:28[2-9]|8(?:11|[2-57-9]\\d))\\d{5}', , , , '28212345', , , [8]], + [ + , + , + '6800[0-79]\\d{3}|6(?:[235]\\d\\d|6(?:0[0-5]|[1-9]\\d)|8(?:0[1-9]|[14-8]\\d|2[5-9]|[39][0-4]))\\d{4}', + , + , + , + '66123456', + , + , + [8], + ], + [, , '0800\\d{3}', , , , '0800501', , , [7]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'MO', + 853, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{4})(\\d{3})', '$1 $2', ['0']], + [, '(\\d{4})(\\d{4})', '$1 $2', ['[268]']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + MP: [ + , + [, , '[58]\\d{9}|(?:67|90)0\\d{7}', , , , , , , [10], [7]], + [ + , + , + '670(?:2(?:3[3-7]|56|8[4-8])|32[1-38]|4(?:33|8[348])|5(?:32|55|88)|6(?:64|70|82)|78[3589]|8[3-9]8|989)\\d{4}', + , + , + , + '6702345678', + , + , + , + [7], + ], + [ + , + , + '670(?:2(?:3[3-7]|56|8[4-8])|32[1-38]|4(?:33|8[348])|5(?:32|55|88)|6(?:64|70|82)|78[3589]|8[3-9]8|989)\\d{4}', + , + , + , + '6702345678', + , + , + , + [7], + ], + [, , '8(?:00|33|44|55|66|77|88)[2-9]\\d{6}', , , , '8002123456'], + [, , '900[2-9]\\d{6}', , , , '9002123456'], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[12]|33|44|66|77|88)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , , , , , , , , [-1]], + 'MP', + 1, + '011', + '1', + , + , + '1|([2-9]\\d{6})$', + '670$1', + , + 1, + , + , + [, , , , , , , , , [-1]], + , + '670', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + MQ: [ + , + [, , '(?:69|80)\\d{7}|(?:59|97)6\\d{6}', , , , , , , [9]], + [, , '596(?:[04-7]\\d|10|2[7-9]|3[04-9]|8[09]|9[4-9])\\d{4}', , , , '596301234'], + [, , '69(?:6(?:[0-46-9]\\d|5[0-6])|727)\\d{4}', , , , '696201234'], + [, , '80[0-5]\\d{6}', , , , '800012345'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '976(?:6\\d|7[0-367])\\d{4}', , , , '976612345'], + 'MQ', + 596, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[569]'], '0$1'], + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['8'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + MR: [ + , + [, , '(?:[2-4]\\d\\d|800)\\d{5}', , , , , , , [8]], + [, , '(?:25[08]|35\\d|45[1-7])\\d{5}', , , , '35123456'], + [, , '[2-4][0-46-9]\\d{6}', , , , '22123456'], + [, , '800\\d{5}', , , , '80012345'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'MR', + 222, + '00', + , + , + , + , + , + , + , + [[, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[2-48]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + MS: [ + , + [, , '(?:[58]\\d\\d|664|900)\\d{7}', , , , , , , [10], [7]], + [, , '6644(?:1[0-3]|91)\\d{4}', , , , '6644912345', , , , [7]], + [, , '664(?:3(?:49|9[1-6])|49[2-6])\\d{4}', , , , '6644923456', , , , [7]], + [, , '8(?:00|33|44|55|66|77|88)[2-9]\\d{6}', , , , '8002123456'], + [, , '900[2-9]\\d{6}', , , , '9002123456'], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[12]|33|44|66|77|88)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , , , , , , , , [-1]], + 'MS', + 1, + '011', + '1', + , + , + '1|([34]\\d{6})$', + '664$1', + , + , + , + , + [, , , , , , , , , [-1]], + , + '664', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + MT: [ + , + [, , '3550\\d{4}|(?:[2579]\\d\\d|800)\\d{5}', , , , , , , [8]], + [, , '20(?:3[1-4]|6[059])\\d{4}|2(?:0[19]|[1-357]\\d|60)\\d{5}', , , , '21001234'], + [ + , + , + '(?:7(?:210|[79]\\d\\d)|9(?:[29]\\d\\d|69[67]|8(?:1[1-3]|89|97)))\\d{4}', + , + , + , + '96961234', + ], + [, , '800[3467]\\d{4}', , , , '80071234'], + [, , '5(?:0(?:0(?:37|43)|(?:6\\d|70|9[0168])\\d)|[12]\\d0[1-5])\\d{3}', , , , '50037123'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '3550\\d{4}', , , , '35501234'], + 'MT', + 356, + '00', + , + , + , + , + , + , + , + [[, '(\\d{4})(\\d{4})', '$1 $2', ['[2357-9]']]], + , + [, , '7117\\d{4}', , , , '71171234'], + , + , + [, , , , , , , , , [-1]], + [, , '501\\d{5}', , , , '50112345'], + , + , + [, , , , , , , , , [-1]], + ], + MU: [ + , + [, , '(?:5|8\\d\\d)\\d{7}|[2-468]\\d{6}', , , , , , , [7, 8, 10]], + [ + , + , + '(?:2(?:[0346-8]\\d|1[0-7])|4(?:[013568]\\d|2[4-7])|54(?:[3-5]\\d|71)|6\\d\\d|8(?:14|3[129]))\\d{4}', + , + , + , + '54480123', + , + , + [7, 8], + ], + [ + , + , + '5(?:4(?:2[1-389]|7[1-9])|87[15-8])\\d{4}|5(?:2[5-9]|4[3-689]|[57]\\d|8[0-689]|9[0-8])\\d{5}', + , + , + , + '52512345', + , + , + [8], + ], + [, , '802\\d{7}|80[0-2]\\d{4}', , , , '8001234', , , [7, 10]], + [, , '30\\d{5}', , , , '3012345', , , [7]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '3(?:20|9\\d)\\d{4}', , , , '3201234', , , [7]], + 'MU', + 230, + '0(?:0|[24-7]0|3[03])', + , + , + , + , + , + '020', + , + [ + [, '(\\d{3})(\\d{4})', '$1 $2', ['[2-46]|8[013]']], + [, '(\\d{4})(\\d{4})', '$1 $2', ['5']], + [, '(\\d{5})(\\d{5})', '$1 $2', ['8']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + MV: [ + , + [, , '(?:800|9[0-57-9]\\d)\\d{7}|[34679]\\d{6}', , , , , , , [7, 10]], + [ + , + , + '(?:3(?:0[0-3]|3[0-59])|6(?:[57][02468]|6[024-68]|8[024689]))\\d{4}', + , + , + , + '6701234', + , + , + [7], + ], + [, , '46[46]\\d{4}|(?:7\\d|9[13-9])\\d{5}', , , , '7712345', , , [7]], + [, , '800\\d{7}', , , , '8001234567', , , [10]], + [, , '900\\d{7}', , , , '9001234567', , , [10]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'MV', + 960, + '0(?:0|19)', + , + , + , + , + , + '00', + , + [ + [, '(\\d{3})(\\d{4})', '$1-$2', ['[3467]|9[13-9]']], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['[89]']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '4[05]0\\d{4}', , , , '4001234', , , [7]], + , + , + [, , , , , , , , , [-1]], + ], + MW: [ + , + [, , '(?:[19]\\d|[23]1|77|88)\\d{7}|1\\d{6}', , , , , , , [7, 9]], + [, , '(?:1[2-9]|21\\d\\d)\\d{5}', , , , '1234567'], + [, , '111\\d{6}|(?:31|77|88|9[89])\\d{7}', , , , '991234567', , , [9]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'MW', + 265, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d)(\\d{3})(\\d{3})', '$1 $2 $3', ['1[2-9]'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['2'], '0$1'], + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[137-9]'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + MX: [ + , + [ + , + , + '1(?:(?:44|99)[1-9]|65[0-689])\\d{7}|(?:1(?:[017]\\d|[235][1-9]|4[0-35-9]|6[0-46-9]|8[1-79]|9[1-8])|[2-9]\\d)\\d{8}', + , + , + , + , + , + , + [10, 11], + [7, 8], + ], + [ + , + , + '6571\\d{6}|(?:2(?:0[01]|2[1-9]|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[25-7][1-9]|3[1-8]|4\\d|8[1-35-9]|9[2-689])|5(?:[56]\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[1-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1-467][1-9]|5[13-9]|8[1-69]|9[17])|8(?:1\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|6[1-9]|7[12]|8[1-8]|9\\d))\\d{7}', + , + , + , + '2001234567', + , + , + [10], + [7, 8], + ], + [ + , + , + '6571\\d{6}|(?:1(?:2(?:2[1-9]|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[24-7][1-9]|3[1-8]|8[1-35-9]|9[2-689])|5(?:[56]\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[1-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1-467][1-9]|5[13-9]|8[1-69]|9[17])|8(?:1\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69][1-9]|7[12]|8[1-8]))|2(?:2[1-9]|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[25-7][1-9]|3[1-8]|4\\d|8[1-35-9]|9[2-689])|5(?:[56]\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[1-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1-467][1-9]|5[13-9]|8[1-69]|9[17])|8(?:1\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|6[1-9]|7[12]|8[1-8]|9\\d))\\d{7}', + , + , + , + '12221234567', + , + , + , + [7, 8], + ], + [, , '8(?:00|88)\\d{7}', , , , '8001234567', , , [10]], + [, , '900\\d{7}', , , , '9001234567', , , [10]], + [, , '300\\d{7}', , , , '3001234567', , , [10]], + [, , '500\\d{7}', , , , '5001234567', , , [10]], + [, , , , , , , , , [-1]], + 'MX', + 52, + '0[09]', + '01', + , + , + '0(?:[12]|4[45])|1', + , + '00', + , + [ + [, '(\\d{5})', '$1', ['53']], + [, '(\\d{2})(\\d{4})(\\d{4})', '$1 $2 $3', ['33|5[56]|81'], , , 1], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['[2-9]'], , , 1], + [, '(\\d)(\\d{2})(\\d{4})(\\d{4})', '$2 $3 $4', ['1(?:33|5[56]|81)'], , , 1], + [, '(\\d)(\\d{3})(\\d{3})(\\d{4})', '$2 $3 $4', ['1'], , , 1], + ], + [ + [, '(\\d{2})(\\d{4})(\\d{4})', '$1 $2 $3', ['33|5[56]|81'], , , 1], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['[2-9]'], , , 1], + [, '(\\d)(\\d{2})(\\d{4})(\\d{4})', '$2 $3 $4', ['1(?:33|5[56]|81)'], , , 1], + [, '(\\d)(\\d{3})(\\d{3})(\\d{4})', '$2 $3 $4', ['1'], , , 1], + ], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + MY: [ + , + [, , '1\\d{8,9}|(?:3\\d|[4-9])\\d{7}', , , , , , , [8, 9, 10], [6, 7]], + [ + , + , + '(?:3(?:2[0-36-9]|3[0-368]|4[0-278]|5[0-24-8]|6[0-467]|7[1246-9]|8\\d|9[0-57])\\d|4(?:2[0-689]|[3-79]\\d|8[1-35689])|5(?:2[0-589]|[3468]\\d|5[0-489]|7[1-9]|9[23])|6(?:2[2-9]|3[1357-9]|[46]\\d|5[0-6]|7[0-35-9]|85|9[015-8])|7(?:[2579]\\d|3[03-68]|4[0-8]|6[5-9]|8[0-35-9])|8(?:[24][2-8]|3[2-5]|5[2-7]|6[2-589]|7[2-578]|[89][2-9])|9(?:0[57]|13|[25-7]\\d|[3489][0-8]))\\d{5}', + , + , + , + '323856789', + , + , + [8, 9], + [6, 7], + ], + [ + , + , + '1(?:1888[69]|4400|8(?:47|8[27])[0-4])\\d{4}|1(?:0(?:[23568]\\d|4[0-6]|7[016-9]|9[0-8])|1(?:[1-5]\\d\\d|6(?:0[5-9]|[1-9]\\d)|7(?:[0134]\\d|2[1-9]|5[0-6]))|(?:(?:[269]|59)\\d|[37][1-9]|4[235-9])\\d|8(?:1[23]|[236]\\d|4[06]|5[7-9]|7[016-9]|8[01]|9[0-8]))\\d{5}', + , + , + , + '123456789', + , + , + [9, 10], + ], + [, , '1[378]00\\d{6}', , , , '1300123456', , , [10]], + [, , '1600\\d{6}', , , , '1600123456', , , [10]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [ + , + , + '15(?:4(?:6[0-4]\\d|8(?:0[125]|[17]\\d|21|3[01]|4[01589]|5[014]|6[02]))|6(?:32[0-6]|78\\d))\\d{4}', + , + , + , + '1546012345', + , + , + [10], + ], + 'MY', + 60, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d)(\\d{3})(\\d{4})', '$1-$2 $3', ['[4-79]'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{3,4})', '$1-$2 $3', ['1(?:[02469]|[378][1-9])|8'], '0$1'], + [, '(\\d)(\\d{4})(\\d{4})', '$1-$2 $3', ['3'], '0$1'], + [, '(\\d)(\\d{3})(\\d{2})(\\d{4})', '$1-$2-$3-$4', ['1[36-8]']], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1-$2 $3', ['15'], '0$1'], + [, '(\\d{2})(\\d{4})(\\d{4})', '$1-$2 $3', ['1'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + MZ: [ + , + [, , '(?:2|8\\d)\\d{7}', , , , , , , [8, 9]], + [, , '2(?:[1346]\\d|5[0-2]|[78][12]|93)\\d{5}', , , , '21123456', , , [8]], + [, , '8[2-79]\\d{7}', , , , '821234567', , , [9]], + [, , '800\\d{6}', , , , '800123456', , , [9]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'MZ', + 258, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{2})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['2|8[2-79]']], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['8']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + NA: [ + , + [, , '[68]\\d{7,8}', , , , , , , [8, 9]], + [ + , + , + '64426\\d{3}|6(?:1(?:2[2-7]|3[01378]|4[0-4])|254|32[0237]|4(?:27|41|5[25])|52[236-8]|626|7(?:2[2-4]|30))\\d{4,5}|6(?:1(?:(?:0\\d|2[0189]|3[24-69]|4[5-9])\\d|17|69|7[014])|2(?:17|5[0-36-8]|69|70)|3(?:17|2[14-689]|34|6[289]|7[01]|81)|4(?:17|2[0-2]|4[06]|5[0137]|69|7[01])|5(?:17|2[0459]|69|7[01])|6(?:17|25|38|42|69|7[01])|7(?:17|2[569]|3[13]|6[89]|7[01]))\\d{4}', + , + , + , + '61221234', + ], + [, , '(?:60|8[1245])\\d{7}', , , , '811234567', , , [9]], + [, , '80\\d{7}', , , , '800123456', , , [9]], + [, , '8701\\d{5}', , , , '870123456', , , [9]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '8(?:3\\d\\d|86)\\d{5}', , , , '88612345'], + 'NA', + 264, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{2})(\\d{3})(\\d{3})', '$1 $2 $3', ['88'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['6'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['87'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['8'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + NC: [ + , + [, , '[2-57-9]\\d{5}', , , , , , , [6]], + [, , '(?:2[03-9]|3[0-5]|4[1-7]|88)\\d{4}', , , , '201234'], + [, , '(?:5[0-4]|[79]\\d|8[0-79])\\d{4}', , , , '751234'], + [, , , , , , , , , [-1]], + [, , '36\\d{4}', , , , '366711'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'NC', + 687, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{3})', '$1', ['5[6-8]']], + [, '(\\d{2})(\\d{2})(\\d{2})', '$1.$2.$3', ['[2-57-9]']], + ], + [[, '(\\d{2})(\\d{2})(\\d{2})', '$1.$2.$3', ['[2-57-9]']]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + NE: [ + , + [, , '[027-9]\\d{7}', , , , , , , [8]], + [ + , + , + '2(?:0(?:20|3[1-8]|4[13-5]|5[14]|6[14578]|7[1-578])|1(?:4[145]|5[14]|6[14-68]|7[169]|88))\\d{4}', + , + , + , + '20201234', + ], + [, , '(?:23|7[04]|[89]\\d)\\d{6}', , , , '93123456'], + [, , '08\\d{6}', , , , '08123456'], + [, , '09\\d{6}', , , , '09123456'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'NE', + 227, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{2})(\\d{3})(\\d{3})', '$1 $2 $3', ['08']], + [, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[089]|2[013]|7[04]']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + NF: [ + , + [, , '[13]\\d{5}', , , , , , , [6], [5]], + [, , '(?:1(?:06|17|28|39)|3[0-2]\\d)\\d{3}', , , , '106609', , , , [5]], + [, , '(?:14|3[58])\\d{4}', , , , '381234', , , , [5]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'NF', + 672, + '00', + , + , + , + '([0-258]\\d{4})$', + '3$1', + , + , + [ + [, '(\\d{2})(\\d{4})', '$1 $2', ['1[0-3]']], + [, '(\\d)(\\d{5})', '$1 $2', ['[13]']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + NG: [ + , + [ + , + , + '(?:[124-7]|9\\d{3})\\d{6}|[1-9]\\d{7}|[78]\\d{9,13}', + , + , + , + , + , + , + [7, 8, 10, 11, 12, 13, 14], + [5, 6], + ], + [ + , + , + '(?:(?:[1-356]\\d|4[02-8]|8[2-9])\\d|9(?:0[3-9]|[1-9]\\d))\\d{5}|7(?:0(?:[013-689]\\d|2[0-24-9])\\d{3,4}|[1-79]\\d{6})|(?:[12]\\d|4[147]|5[14579]|6[1578]|7[1-3578])\\d{5}', + , + , + , + '18040123', + , + , + [7, 8], + [5, 6], + ], + [ + , + , + '(?:702[0-24-9]|8(?:01|19)[01])\\d{6}|(?:70[13-689]|8(?:0[2-9]|1[0-8])|9(?:0[1-9]|1[2356]))\\d{7}', + , + , + , + '8021234567', + , + , + [10], + ], + [, , '800\\d{7,11}', , , , '80017591759', , , [10, 11, 12, 13, 14]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'NG', + 234, + '009', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{2})(\\d{2})(\\d{3})', '$1 $2 $3', ['78'], '0$1'], + [, '(\\d)(\\d{3})(\\d{3,4})', '$1 $2 $3', ['[12]|9(?:0[3-9]|[1-9])'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{2,3})', '$1 $2 $3', ['[3-7]|8[2-9]'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['[7-9]'], '0$1'], + [, '(\\d{3})(\\d{4})(\\d{4,5})', '$1 $2 $3', ['[78]'], '0$1'], + [, '(\\d{3})(\\d{5})(\\d{5,6})', '$1 $2 $3', ['[78]'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '700\\d{7,11}', , , , '7001234567', , , [10, 11, 12, 13, 14]], + , + , + [, , , , , , , , , [-1]], + ], + NI: [ + , + [, , '(?:1800|[25-8]\\d{3})\\d{4}', , , , , , , [8]], + [, , '2\\d{7}', , , , '21234567'], + [ + , + , + '(?:5(?:5[0-7]|[78]\\d)|6(?:20|3[035]|4[045]|5[05]|77|8[1-9]|9[059])|(?:7[5-8]|8\\d)\\d)\\d{5}', + , + , + , + '81234567', + ], + [, , '1800\\d{4}', , , , '18001234'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'NI', + 505, + '00', + , + , + , + , + , + , + , + [[, '(\\d{4})(\\d{4})', '$1 $2', ['[125-8]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + NL: [ + , + [ + , + , + '(?:[124-7]\\d\\d|3(?:[02-9]\\d|1[0-8]))\\d{6}|[89]\\d{6,9}|1\\d{4,5}', + , + , + , + , + , + , + [5, 6, 7, 8, 9, 10], + ], + [ + , + , + '(?:1(?:[035]\\d|1[13-578]|6[124-8]|7[24]|8[0-467])|2(?:[0346]\\d|2[2-46-9]|5[125]|9[479])|3(?:[03568]\\d|1[3-8]|2[01]|4[1-8])|4(?:[0356]\\d|1[1-368]|7[58]|8[15-8]|9[23579])|5(?:[0358]\\d|[19][1-9]|2[1-57-9]|4[13-8]|6[126]|7[0-3578])|7\\d\\d)\\d{6}', + , + , + , + '101234567', + , + , + [9], + ], + [, , '6[1-58]\\d{7}', , , , '612345678', , , [9]], + [, , '800\\d{4,7}', , , , '8001234', , , [7, 8, 9, 10]], + [, , '90[069]\\d{4,7}', , , , '9061234', , , [7, 8, 9, 10]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '(?:85|91)\\d{7}', , , , '851234567', , , [9]], + 'NL', + 31, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{4})', '$1', ['1[238]|[34]']], + [, '(\\d{2})(\\d{3,4})', '$1 $2', ['14']], + [, '(\\d{6})', '$1', ['1']], + [, '(\\d{3})(\\d{4,7})', '$1 $2', ['[89]0'], '0$1'], + [, '(\\d{2})(\\d{7})', '$1 $2', ['66'], '0$1'], + [, '(\\d)(\\d{8})', '$1 $2', ['6'], '0$1'], + [ + , + '(\\d{3})(\\d{3})(\\d{3})', + '$1 $2 $3', + ['1[16-8]|2[259]|3[124]|4[17-9]|5[124679]'], + '0$1', + ], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['[1-57-9]'], '0$1'], + ], + [ + [, '(\\d{3})(\\d{4,7})', '$1 $2', ['[89]0'], '0$1'], + [, '(\\d{2})(\\d{7})', '$1 $2', ['66'], '0$1'], + [, '(\\d)(\\d{8})', '$1 $2', ['6'], '0$1'], + [ + , + '(\\d{3})(\\d{3})(\\d{3})', + '$1 $2 $3', + ['1[16-8]|2[259]|3[124]|4[17-9]|5[124679]'], + '0$1', + ], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['[1-57-9]'], '0$1'], + ], + [, , '66\\d{7}', , , , '662345678', , , [9]], + , + , + [ + , + , + '140(?:1[035]|2[0346]|3[03568]|4[0356]|5[0358]|8[458])|140(?:1[16-8]|2[259]|3[124]|4[17-9]|5[124679]|7)\\d', + , + , + , + , + , + , + [5, 6], + ], + [ + , + , + '140(?:1[035]|2[0346]|3[03568]|4[0356]|5[0358]|8[458])|(?:140(?:1[16-8]|2[259]|3[124]|4[17-9]|5[124679]|7)|8[478]\\d{6})\\d', + , + , + , + '14020', + , + , + [5, 6, 9], + ], + , + , + [, , , , , , , , , [-1]], + ], + NO: [ + , + [, , '(?:0|[2-9]\\d{3})\\d{4}', , , , , , , [5, 8]], + [, , '(?:2[1-4]|3[1-3578]|5[1-35-7]|6[1-4679]|7[0-8])\\d{6}', , , , '21234567', , , [8]], + [, , '(?:4[015-8]|59|9\\d)\\d{6}', , , , '40612345', , , [8]], + [, , '80[01]\\d{5}', , , , '80012345', , , [8]], + [, , '82[09]\\d{5}', , , , '82012345', , , [8]], + [, , '810(?:0[0-6]|[2-8]\\d)\\d{3}', , , , '81021234', , , [8]], + [, , '880\\d{5}', , , , '88012345', , , [8]], + [, , '85[0-5]\\d{5}', , , , '85012345', , , [8]], + 'NO', + 47, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{3})(\\d{2})(\\d{3})', '$1 $2 $3', ['[489]|59']], + [, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[235-7]']], + ], + , + [, , , , , , , , , [-1]], + 1, + '[02-689]|7[0-8]', + [, , , , , , , , , [-1]], + [, , '(?:0[2-9]|81(?:0(?:0[7-9]|1\\d)|5\\d\\d))\\d{3}', , , , '02000'], + , + , + [, , '81[23]\\d{5}', , , , '81212345', , , [8]], + ], + NP: [ + , + [, , '(?:1\\d|9)\\d{9}|[1-9]\\d{7}', , , , , , , [8, 10, 11], [6, 7]], + [ + , + , + '(?:1[0-6]\\d|99[02-6])\\d{5}|(?:2[13-79]|3[135-8]|4[146-9]|5[135-7]|6[13-9]|7[15-9]|8[1-46-9]|9[1-7])[2-6]\\d{5}', + , + , + , + '14567890', + , + , + [8], + [6, 7], + ], + [, , '9(?:6[0-3]|7[245]|8[0-24-68])\\d{7}', , , , '9841234567', , , [10]], + [, , '1(?:66001|800\\d\\d)\\d{5}', , , , '16600101234', , , [11]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'NP', + 977, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d)(\\d{7})', '$1-$2', ['1[2-6]'], '0$1'], + [, '(\\d{2})(\\d{6})', '$1-$2', ['1[01]|[2-8]|9(?:[1-579]|6[2-6])'], '0$1'], + [, '(\\d{3})(\\d{7})', '$1-$2', ['9']], + [, '(\\d{4})(\\d{2})(\\d{5})', '$1-$2-$3', ['1']], + ], + [ + [, '(\\d)(\\d{7})', '$1-$2', ['1[2-6]'], '0$1'], + [, '(\\d{2})(\\d{6})', '$1-$2', ['1[01]|[2-8]|9(?:[1-579]|6[2-6])'], '0$1'], + [, '(\\d{3})(\\d{7})', '$1-$2', ['9']], + ], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + NR: [ + , + [, , '(?:444|(?:55|8\\d)\\d|666)\\d{4}', , , , , , , [7]], + [, , '444\\d{4}', , , , '4441234'], + [, , '(?:55[3-9]|666|8\\d\\d)\\d{4}', , , , '5551234'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'NR', + 674, + '00', + , + , + , + , + , + , + , + [[, '(\\d{3})(\\d{4})', '$1 $2', ['[4-68]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + NU: [ + , + [, , '(?:[47]|888\\d)\\d{3}', , , , , , , [4, 7]], + [, , '[47]\\d{3}', , , , '7012', , , [4]], + [, , '888[4-9]\\d{3}', , , , '8884012', , , [7]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'NU', + 683, + '00', + , + , + , + , + , + , + , + [[, '(\\d{3})(\\d{4})', '$1 $2', ['8']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + NZ: [ + , + [ + , + , + '[29]\\d{7,9}|50\\d{5}(?:\\d{2,3})?|6[0-35-9]\\d{6}|7\\d{7,8}|8\\d{4,9}|(?:11\\d|[34])\\d{7}', + , + , + , + , + , + , + [5, 6, 7, 8, 9, 10], + ], + [ + , + , + '24099\\d{3}|(?:3[2-79]|[49][2-9]|6[235-9]|7[2-57-9])\\d{6}', + , + , + , + '32345678', + , + , + [8], + [7], + ], + [, , '2[0-27-9]\\d{7,8}|21\\d{6}', , , , '211234567', , , [8, 9, 10]], + [, , '508\\d{6,7}|80\\d{6,8}', , , , '800123456', , , [8, 9, 10]], + [ + , + , + '(?:11\\d{5}|50(?:0[08]|30|66|77|88))\\d{3}|90\\d{6,8}', + , + , + , + '900123456', + , + , + [7, 8, 9, 10], + ], + [, , , , , , , , , [-1]], + [, , '70\\d{7}', , , , '701234567', , , [9]], + [, , , , , , , , , [-1]], + 'NZ', + 64, + '0(?:0|161)', + '0', + , + , + '0', + , + '00', + , + [ + [, '(\\d{2})(\\d{3,8})', '$1 $2', ['8[1-579]'], '0$1'], + [ + , + '(\\d{3})(\\d{2})(\\d{2,3})', + '$1 $2 $3', + ['50[036-8]|[89]0', '50(?:[0367]|88)|[89]0'], + '0$1', + ], + [, '(\\d)(\\d{3})(\\d{4})', '$1-$2 $3', ['24|[346]|7[2-57-9]|9[2-9]'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['2(?:10|74)|[59]|80'], '0$1'], + [, '(\\d{2})(\\d{3,4})(\\d{4})', '$1 $2 $3', ['1|2[028]'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{3,5})', '$1 $2 $3', ['2(?:[169]|7[0-35-9])|7|86'], '0$1'], + ], + , + [, , '[28]6\\d{6,7}', , , , '26123456', , , [8, 9]], + , + , + [, , , , , , , , , [-1]], + [, , '8(?:1[6-9]|22|3\\d|4[045]|5[459]|7[0-3579]|90)\\d{2,7}', , , , '83012378'], + , + , + [, , , , , , , , , [-1]], + ], + OM: [ + , + [, , '(?:1505|[279]\\d{3}|500)\\d{4}|800\\d{5,6}', , , , , , , [7, 8, 9]], + [, , '2[2-6]\\d{6}', , , , '23123456', , , [8]], + [ + , + , + '1505\\d{4}|(?:7(?:[1289]\\d|7[0-4])|9(?:0[1-9]|[1-9]\\d))\\d{5}', + , + , + , + '92123456', + , + , + [8], + ], + [, , '8007\\d{4,5}|(?:500|800[05])\\d{4}', , , , '80071234'], + [, , '900\\d{5}', , , , '90012345', , , [8]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'OM', + 968, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{3})(\\d{4,6})', '$1 $2', ['[58]']], + [, '(\\d{2})(\\d{6})', '$1 $2', ['2']], + [, '(\\d{4})(\\d{4})', '$1 $2', ['[179]']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + PA: [ + , + [, , '(?:00800|8\\d{3})\\d{6}|[68]\\d{7}|[1-57-9]\\d{6}', , , , , , , [7, 8, 10, 11]], + [ + , + , + '(?:1(?:0\\d|1[479]|2[37]|3[0137]|4[17]|5[05]|6[58]|7[0167]|8[258]|9[1389])|2(?:[0235-79]\\d|1[0-7]|4[013-9]|8[02-9])|3(?:[089]\\d|1[0-7]|2[0-5]|33|4[0-79]|5[05]|6[068]|7[0-8])|4(?:00|3[0-579]|4\\d|7[0-57-9])|5(?:[01]\\d|2[0-7]|[56]0|79)|7(?:0[09]|2[0-26-8]|3[03]|4[04]|5[05-9]|6[056]|7[0-24-9]|8[6-9]|90)|8(?:09|2[89]|3\\d|4[0-24-689]|5[014]|8[02])|9(?:0[5-9]|1[0135-8]|2[036-9]|3[35-79]|40|5[0457-9]|6[05-9]|7[04-9]|8[35-8]|9\\d))\\d{4}', + , + , + , + '2001234', + , + , + [7], + ], + [ + , + , + '(?:1[16]1|21[89]|6(?:[02-9]\\d|1[0-8])\\d|8(?:1[01]|7[23]))\\d{4}', + , + , + , + '61234567', + , + , + [7, 8], + ], + [, , '800\\d{4,5}|(?:00800|800\\d)\\d{6}', , , , '8001234'], + [, , '(?:8(?:22|55|60|7[78]|86)|9(?:00|81))\\d{4}', , , , '8601234', , , [7]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'PA', + 507, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{3})(\\d{4})', '$1-$2', ['[1-57-9]']], + [, '(\\d{4})(\\d{4})', '$1-$2', ['[68]']], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['8']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + PE: [ + , + [, , '(?:[14-8]|9\\d)\\d{7}', , , , , , , [8, 9], [6, 7]], + [ + , + , + '(?:(?:4[34]|5[14])[0-8]\\d|7(?:173|3[0-8]\\d)|8(?:10[05689]|6(?:0[06-9]|1[6-9]|29)|7(?:0[569]|[56]0)))\\d{4}|(?:1[0-8]|4[12]|5[236]|6[1-7]|7[246]|8[2-4])\\d{6}', + , + , + , + '11234567', + , + , + [8], + [6, 7], + ], + [, , '9\\d{8}', , , , '912345678', , , [9]], + [, , '800\\d{5}', , , , '80012345', , , [8]], + [, , '805\\d{5}', , , , '80512345', , , [8]], + [, , '801\\d{5}', , , , '80112345', , , [8]], + [, , '80[24]\\d{5}', , , , '80212345', , , [8]], + [, , , , , , , , , [-1]], + 'PE', + 51, + '19(?:1[124]|77|90)00', + '0', + ' Anexo ', + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{5})', '$1 $2', ['80'], '(0$1)'], + [, '(\\d)(\\d{7})', '$1 $2', ['1'], '(0$1)'], + [, '(\\d{2})(\\d{6})', '$1 $2', ['[4-8]'], '(0$1)'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['9']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + PF: [ + , + [, , '4\\d{5}(?:\\d{2})?|8\\d{7,8}', , , , , , , [6, 8, 9]], + [, , '4(?:0[4-689]|9[4-68])\\d{5}', , , , '40412345', , , [8]], + [, , '8[7-9]\\d{6}', , , , '87123456', , , [8]], + [, , '80[0-5]\\d{6}', , , , '800012345', , , [9]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '499\\d{5}', , , , '49901234', , , [8]], + 'PF', + 689, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3', ['44']], + [, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['4|8[7-9]']], + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['8']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , '44\\d{4}', , , , , , , [6]], + [, , '44\\d{4}', , , , '440123', , , [6]], + , + , + [, , , , , , , , , [-1]], + ], + PG: [ + , + [, , '(?:180|[78]\\d{3})\\d{4}|(?:[2-589]\\d|64)\\d{5}', , , , , , , [7, 8]], + [ + , + , + '(?:(?:3[0-2]|4[257]|5[34]|9[78])\\d|64[1-9]|85[02-46-9])\\d{4}', + , + , + , + '3123456', + , + , + [7], + ], + [, , '(?:7\\d|8[18])\\d{6}', , , , '70123456', , , [8]], + [, , '180\\d{4}', , , , '1801234', , , [7]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '2(?:0[0-47]|7[568])\\d{4}', , , , '2751234', , , [7]], + 'PG', + 675, + '00|140[1-3]', + , + , + , + , + , + '00', + , + [ + [, '(\\d{3})(\\d{4})', '$1 $2', ['18|[2-69]|85']], + [, '(\\d{4})(\\d{4})', '$1 $2', ['[78]']], + ], + , + [, , '27[01]\\d{4}', , , , '2700123', , , [7]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + PH: [ + , + [ + , + , + '(?:[2-7]|9\\d)\\d{8}|2\\d{5}|(?:1800|8)\\d{7,9}', + , + , + , + , + , + , + [6, 8, 9, 10, 11, 12, 13], + [4, 5, 7], + ], + [ + , + , + '(?:(?:2[3-8]|3[2-68]|4[2-9]|5[2-6]|6[2-58]|7[24578])\\d{3}|88(?:22\\d\\d|42))\\d{4}|(?:2|8[2-8]\\d\\d)\\d{5}', + , + , + , + '232345678', + , + , + [6, 8, 9, 10], + [4, 5, 7], + ], + [ + , + , + '(?:8(?:1[37]|9[5-8])|9(?:0[5-9]|1[0-24-9]|[235-7]\\d|4[2-9]|8[135-9]|9[1-9]))\\d{7}', + , + , + , + '9051234567', + , + , + [10], + ], + [, , '1800\\d{7,9}', , , , '180012345678', , , [11, 12, 13]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'PH', + 63, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d)(\\d{5})', '$1 $2', ['2'], '(0$1)'], + [ + , + '(\\d{4})(\\d{4,6})', + '$1 $2', + [ + '3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|544|88[245]|(?:52|64|86)2', + '3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))', + ], + '(0$1)', + ], + [ + , + '(\\d{5})(\\d{4})', + '$1 $2', + ['346|4(?:27|9[35])|883', '3469|4(?:279|9(?:30|56))|8834'], + '(0$1)', + ], + [, '(\\d)(\\d{4})(\\d{4})', '$1 $2 $3', ['2'], '(0$1)'], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['[3-7]|8[2-8]'], '(0$1)'], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['[89]'], '0$1'], + [, '(\\d{4})(\\d{3})(\\d{4})', '$1 $2 $3', ['1']], + [, '(\\d{4})(\\d{1,2})(\\d{3})(\\d{4})', '$1 $2 $3 $4', ['1']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + PK: [ + , + [ + , + , + '122\\d{6}|[24-8]\\d{10,11}|9(?:[013-9]\\d{8,10}|2(?:[01]\\d\\d|2(?:[06-8]\\d|1[01]))\\d{7})|(?:[2-8]\\d{3}|92(?:[0-7]\\d|8[1-9]))\\d{6}|[24-9]\\d{8}|[89]\\d{7}', + , + , + , + , + , + , + [8, 9, 10, 11, 12], + [5, 6, 7], + ], + [ + , + , + '(?:(?:21|42)[2-9]|58[126])\\d{7}|(?:2[25]|4[0146-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\\d{6,7}|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8]))[2-9]\\d{5,6}', + , + , + , + '2123456789', + , + , + [9, 10], + [5, 6, 7, 8], + ], + [, , '3(?:[014]\\d|2[0-5]|3[0-7]|55|64)\\d{7}', , , , '3012345678', , , [10]], + [, , '800\\d{5}(?:\\d{3})?', , , , '80012345', , , [8, 11]], + [, , '900\\d{5}', , , , '90012345', , , [8]], + [, , , , , , , , , [-1]], + [, , '122\\d{6}', , , , '122044444', , , [9]], + [, , , , , , , , , [-1]], + 'PK', + 92, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{3})(\\d{2,7})', '$1 $2 $3', ['[89]0'], '0$1'], + [, '(\\d{4})(\\d{5})', '$1 $2', ['1']], + [ + , + '(\\d{3})(\\d{6,7})', + '$1 $2', + [ + '2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8])', + '9(?:2[3-8]|98)|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:22|3[27-9]|4[2-6]|6[3569]|9[25-7]))[2-9]', + ], + '(0$1)', + ], + [ + , + '(\\d{2})(\\d{7,8})', + '$1 $2', + ['(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]'], + '(0$1)', + ], + [, '(\\d{5})(\\d{5})', '$1 $2', ['58'], '(0$1)'], + [, '(\\d{3})(\\d{7})', '$1 $2', ['3'], '0$1'], + [ + , + '(\\d{2})(\\d{3})(\\d{3})(\\d{3})', + '$1 $2 $3 $4', + ['2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91'], + '(0$1)', + ], + [, '(\\d{3})(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3 $4', ['[24-9]'], '(0$1)'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [ + , + , + '(?:2(?:[125]|3[2358]|4[2-4]|9[2-8])|4(?:[0-246-9]|5[3479])|5(?:[1-35-7]|4[2-467])|6(?:0[468]|[1-8])|7(?:[14]|2[236])|8(?:[16]|2[2-689]|3[23578]|4[3478]|5[2356])|9(?:1|22|3[27-9]|4[2-6]|6[3569]|9[2-7]))111\\d{6}', + , + , + , + '21111825888', + , + , + [11, 12], + ], + , + , + [, , , , , , , , , [-1]], + ], + PL: [ + , + [, , '6\\d{5}(?:\\d{2})?|8\\d{9}|[1-9]\\d{6}(?:\\d{2})?', , , , , , , [6, 7, 8, 9, 10]], + [ + , + , + '47\\d{7}|(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])(?:[02-9]\\d{6}|1(?:[0-8]\\d{5}|9\\d{3}(?:\\d{2})?))', + , + , + , + '123456789', + , + , + [7, 9], + ], + [ + , + , + '211(?:1\\d|3[1-5])\\d{4}|(?:45|5[0137]|6[069]|7[2389]|88)\\d{7}', + , + , + , + '512345678', + , + , + [9], + ], + [, , '800\\d{6,7}', , , , '800123456', , , [9, 10]], + [, , '70[01346-8]\\d{6}', , , , '701234567', , , [9]], + [, , '801\\d{6}', , , , '801234567', , , [9]], + [, , , , , , , , , [-1]], + [, , '39\\d{7}', , , , '391234567', , , [9]], + 'PL', + 48, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{5})', '$1', ['19']], + [, '(\\d{3})(\\d{3})', '$1 $2', ['11|64']], + [ + , + '(\\d{2})(\\d{2})(\\d{3})', + '$1 $2 $3', + [ + '(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])1', + '(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])19', + ], + ], + [, '(\\d{3})(\\d{2})(\\d{2,3})', '$1 $2 $3', ['64']], + [ + , + '(\\d{3})(\\d{3})(\\d{3})', + '$1 $2 $3', + ['21|39|45|5[0137]|6[0469]|7[02389]|8(?:0[14]|8)'], + ], + [, '(\\d{2})(\\d{3})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['1[2-8]|[2-7]|8[1-79]|9[145]']], + [, '(\\d{3})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['8']], + ], + , + [, , '64\\d{4,7}', , , , '641234567', , , [6, 7, 8, 9]], + , + , + [, , , , , , , , , [-1]], + [, , '804\\d{6}', , , , '804123456', , , [9]], + , + , + [, , , , , , , , , [-1]], + ], + PM: [ + , + [, , '(?:[45]|80\\d\\d)\\d{5}', , , , , , , [6, 9]], + [, , '(?:4[1-3]|50)\\d{4}', , , , '430123', , , [6]], + [, , '(?:4[02-4]|5[05])\\d{4}', , , , '551234', , , [6]], + [, , '80[0-5]\\d{6}', , , , '800012345', , , [9]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'PM', + 508, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3', ['[45]'], '0$1'], + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['8'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + PR: [ + , + [, , '(?:[589]\\d\\d|787)\\d{7}', , , , , , , [10], [7]], + [, , '(?:787|939)[2-9]\\d{6}', , , , '7872345678', , , , [7]], + [, , '(?:787|939)[2-9]\\d{6}', , , , '7872345678', , , , [7]], + [, , '8(?:00|33|44|55|66|77|88)[2-9]\\d{6}', , , , '8002345678'], + [, , '900[2-9]\\d{6}', , , , '9002345678'], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[12]|33|44|66|77|88)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , , , , , , , , [-1]], + 'PR', + 1, + '011', + '1', + , + , + '1', + , + , + 1, + , + , + [, , , , , , , , , [-1]], + , + '787|939', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + PS: [ + , + [, , '[2489]2\\d{6}|(?:1\\d|5)\\d{8}', , , , , , , [8, 9, 10], [7]], + [, , '(?:22[2-47-9]|42[45]|82[014-68]|92[3569])\\d{5}', , , , '22234567', , , [8], [7]], + [, , '5[69]\\d{7}', , , , '599123456', , , [9]], + [, , '1800\\d{6}', , , , '1800123456', , , [10]], + [, , , , , , , , , [-1]], + [, , '1700\\d{6}', , , , '1700123456', , , [10]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'PS', + 970, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d)(\\d{3})(\\d{4})', '$1 $2 $3', ['[2489]'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['5'], '0$1'], + [, '(\\d{4})(\\d{3})(\\d{3})', '$1 $2 $3', ['1']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + PT: [ + , + [, , '1693\\d{5}|(?:[26-9]\\d|30)\\d{7}', , , , , , , [9]], + [ + , + , + '2(?:[12]\\d|[35][1-689]|4[1-59]|6[1-35689]|7[1-9]|8[1-69]|9[1256])\\d{6}', + , + , + , + '212345678', + ], + [ + , + , + '6[0356]92(?:30|9\\d)\\d{3}|(?:(?:16|6[0356])93|9(?:[1-36]\\d\\d|480))\\d{5}', + , + , + , + '912345678', + ], + [, , '80[02]\\d{6}', , , , '800123456'], + [, , '(?:6(?:0[178]|4[68])\\d|76(?:0[1-57]|1[2-47]|2[237]))\\d{5}', , , , '760123456'], + [, , '80(?:8\\d|9[1579])\\d{5}', , , , '808123456'], + [, , '884[0-4689]\\d{5}', , , , '884123456'], + [, , '30\\d{7}', , , , '301234567'], + 'PT', + 351, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['2[12]']], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['16|[236-9]']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '70(?:7\\d|8[17])\\d{5}', , , , '707123456'], + , + , + [, , '600\\d{6}', , , , '600110000'], + ], + PW: [ + , + [, , '(?:[24-8]\\d\\d|345|900)\\d{4}', , , , , , , [7]], + [ + , + , + '(?:2(?:55|77)|345|488|5(?:35|44|87)|6(?:22|54|79)|7(?:33|47)|8(?:24|55|76)|900)\\d{4}', + , + , + , + '2771234', + ], + [, , '(?:46[0-5]|6[2-4689]0)\\d{4}|(?:45|77|88)\\d{5}', , , , '6201234'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'PW', + 680, + '01[12]', + , + , + , + , + , + , + , + [[, '(\\d{3})(\\d{4})', '$1 $2', ['[2-9]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + PY: [ + , + [ + , + , + '59\\d{4,6}|9\\d{5,10}|(?:[2-46-8]\\d|5[0-8])\\d{4,7}', + , + , + , + , + , + , + [6, 7, 8, 9, 10, 11], + [5], + ], + [ + , + , + '(?:[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36])\\d{5,7}|(?:2(?:2[4-68]|[4-68]\\d|7[15]|9[1-5])|3(?:18|3[167]|4[2357]|51|[67]\\d)|4(?:3[12]|5[13]|9[1-47])|5(?:[1-4]\\d|5[02-4])|6(?:3[1-3]|44|7[1-8])|7(?:4[0-4]|5\\d|6[1-578]|75|8[0-8])|858)\\d{5,6}', + , + , + , + '212345678', + , + , + [7, 8, 9], + [5, 6], + ], + [, , '9(?:51|6[129]|[78][1-6]|9[1-5])\\d{6}', , , , '961456789', , , [9]], + [, , '9800\\d{5,7}', , , , '98000123456', , , [9, 10, 11]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '8700[0-4]\\d{4}', , , , '870012345', , , [9]], + 'PY', + 595, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{3,6})', '$1 $2', ['[2-9]0'], '0$1'], + [, '(\\d{2})(\\d{5})', '$1 $2', ['[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36]'], '(0$1)'], + [ + , + '(\\d{3})(\\d{4,5})', + '$1 $2', + ['2[279]|3[13-5]|4[359]|5|6(?:[34]|7[1-46-8])|7[46-8]|85'], + '(0$1)', + ], + [ + , + '(\\d{2})(\\d{3})(\\d{3,4})', + '$1 $2 $3', + ['2[14-68]|3[26-9]|4[1246-8]|6(?:1|75)|7[1-35]|8[1-36]'], + '(0$1)', + ], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['87']], + [, '(\\d{3})(\\d{6})', '$1 $2', ['9(?:[5-79]|8[1-6])'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['[2-8]'], '0$1'], + [, '(\\d{4})(\\d{3})(\\d{4})', '$1 $2 $3', ['9']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '[2-9]0\\d{4,7}', , , , '201234567', , , [6, 7, 8, 9]], + , + , + [, , , , , , , , , [-1]], + ], + QA: [ + , + [, , '[2-7]\\d{7}|800\\d{4}(?:\\d{2})?|2\\d{6}', , , , , , , [7, 8, 9]], + [, , '4141\\d{4}|(?:23|4[04])\\d{6}', , , , '44123456', , , [8]], + [, , '(?:28|[35-7]\\d)\\d{6}', , , , '33123456', , , [8]], + [, , '800\\d{4}(?:\\d{2})?', , , , '8001234', , , [7, 9]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'QA', + 974, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{3})(\\d{4})', '$1 $2', ['2[126]|8']], + [, '(\\d{4})(\\d{4})', '$1 $2', ['[2-7]']], + ], + , + [, , '2(?:[12]\\d|61)\\d{4}', , , , '2123456', , , [7]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + RE: [ + , + [, , '9769\\d{5}|(?:26|[68]\\d)\\d{7}', , , , , , , [9]], + [, , '26(?:2\\d\\d|30[0-5])\\d{4}', , , , '262161234'], + [ + , + , + '(?:69(?:2\\d\\d|3(?:[06][0-46]|1[013]|2[0-2]|3[0-39]|4\\d|5[0-5]|7[0-27]|8[0-8]|9[0-479]))|9769\\d)\\d{4}', + , + , + , + '692123456', + ], + [, , '80\\d{7}', , , , '801234567'], + [, , '89[1-37-9]\\d{6}', , , , '891123456'], + [, , '8(?:1[019]|2[0156]|84|90)\\d{6}', , , , '810123456'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'RE', + 262, + '00', + '0', + , + , + '0', + , + , + , + [[, '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[2689]'], '0$1']], + , + [, , , , , , , , , [-1]], + 1, + '26[23]|69|[89]', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + RO: [ + , + [, , '(?:[2378]\\d|90)\\d{7}|[23]\\d{5}', , , , , , , [6, 9]], + [, , '[23][13-6]\\d{7}|(?:2(?:19\\d|[3-6]\\d9)|31\\d\\d)\\d\\d', , , , '211234567'], + [ + , + , + '7020\\d{5}|7(?:0[013-9]|1[0-3]|[2-7]\\d|8[03-8]|9[019])\\d{6}', + , + , + , + '712034567', + , + , + [9], + ], + [, , '800\\d{6}', , , , '800123456', , , [9]], + [, , '90[0136]\\d{6}', , , , '900123456', , , [9]], + [, , '801\\d{6}', , , , '801123456', , , [9]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'RO', + 40, + '00', + '0', + ' int ', + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{3})', '$1 $2', ['2[3-6]', '2[3-6]\\d9'], '0$1'], + [, '(\\d{2})(\\d{4})', '$1 $2', ['219|31'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['[23]1'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['[237-9]'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '(?:37\\d|80[578])\\d{6}', , , , '372123456', , , [9]], + , + , + [, , , , , , , , , [-1]], + ], + RS: [ + , + [ + , + , + '38[02-9]\\d{6,9}|6\\d{7,9}|90\\d{4,8}|38\\d{5,6}|(?:7\\d\\d|800)\\d{3,9}|(?:[12]\\d|3[0-79])\\d{5,10}', + , + , + , + , + , + , + [6, 7, 8, 9, 10, 11, 12], + [4, 5], + ], + [ + , + , + '(?:11[1-9]\\d|(?:2[389]|39)(?:0[2-9]|[2-9]\\d))\\d{3,8}|(?:1[02-9]|2[0-24-7]|3[0-8])[2-9]\\d{4,9}', + , + , + , + '10234567', + , + , + [7, 8, 9, 10, 11, 12], + [4, 5, 6], + ], + [, , '6(?:[0-689]|7\\d)\\d{6,7}', , , , '601234567', , , [8, 9, 10]], + [, , '800\\d{3,9}', , , , '80012345'], + [, , '(?:78\\d|90[0169])\\d{3,7}', , , , '90012345', , , [6, 7, 8, 9, 10]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'RS', + 381, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{3,9})', '$1 $2', ['(?:2[389]|39)0|[7-9]'], '0$1'], + [, '(\\d{2})(\\d{5,10})', '$1 $2', ['[1-36]'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '7[06]\\d{4,10}', , , , '700123456'], + , + , + [, , , , , , , , , [-1]], + ], + RU: [ + , + [, , '8\\d{13}|[347-9]\\d{9}', , , , , , , [10, 14], [7]], + [ + , + , + '(?:3(?:0[12]|4[1-35-79]|5[1-3]|65|8[1-58]|9[0145])|4(?:01|1[1356]|2[13467]|7[1-5]|8[1-7]|9[1-689])|8(?:1[1-8]|2[01]|3[13-6]|4[0-8]|5[15]|6[1-35-79]|7[1-37-9]))\\d{7}', + , + , + , + '3011234567', + , + , + [10], + [7], + ], + [, , '9\\d{9}', , , , '9123456789', , , [10]], + [, , '8(?:0[04]|108\\d{3})\\d{7}', , , , '8001234567'], + [, , '80[39]\\d{7}', , , , '8091234567', , , [10]], + [, , , , , , , , , [-1]], + [, , '808\\d{7}', , , , '8081234567', , , [10]], + [, , , , , , , , , [-1]], + 'RU', + 7, + '810', + '8', + , + , + '8', + , + '8~10', + , + [ + [, '(\\d{3})(\\d{2})(\\d{2})', '$1-$2-$3', ['[0-79]']], + [ + , + '(\\d{4})(\\d{2})(\\d{2})(\\d{2})', + '$1 $2 $3 $4', + [ + '7(?:1[0-8]|2[1-9])', + '7(?:1(?:[0-6]2|7|8[27])|2(?:1[23]|[2-9]2))', + '7(?:1(?:[0-6]2|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2', + ], + '8 ($1)', + , + 1, + ], + [ + , + '(\\d{5})(\\d)(\\d{2})(\\d{2})', + '$1 $2 $3 $4', + [ + '7(?:1[0-68]|2[1-9])', + '7(?:1(?:[06][3-6]|[18]|2[35]|[3-5][3-5])|2(?:[13][3-5]|[24-689]|7[457]))', + '7(?:1(?:0(?:[356]|4[023])|[18]|2(?:3[013-9]|5)|3[45]|43[013-79]|5(?:3[1-8]|4[1-7]|5)|6(?:3[0-35-9]|[4-6]))|2(?:1(?:3[178]|[45])|[24-689]|3[35]|7[457]))|7(?:14|23)4[0-8]|71(?:33|45)[1-79]', + ], + '8 ($1)', + , + 1, + ], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['7'], '8 ($1)', , 1], + [ + , + '(\\d{3})(\\d{3})(\\d{2})(\\d{2})', + '$1 $2-$3-$4', + ['[349]|8(?:[02-7]|1[1-8])'], + '8 ($1)', + , + 1, + ], + [, '(\\d{4})(\\d{4})(\\d{3})(\\d{3})', '$1 $2 $3 $4', ['8'], '8 ($1)'], + ], + [ + [ + , + '(\\d{4})(\\d{2})(\\d{2})(\\d{2})', + '$1 $2 $3 $4', + [ + '7(?:1[0-8]|2[1-9])', + '7(?:1(?:[0-6]2|7|8[27])|2(?:1[23]|[2-9]2))', + '7(?:1(?:[0-6]2|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2', + ], + '8 ($1)', + , + 1, + ], + [ + , + '(\\d{5})(\\d)(\\d{2})(\\d{2})', + '$1 $2 $3 $4', + [ + '7(?:1[0-68]|2[1-9])', + '7(?:1(?:[06][3-6]|[18]|2[35]|[3-5][3-5])|2(?:[13][3-5]|[24-689]|7[457]))', + '7(?:1(?:0(?:[356]|4[023])|[18]|2(?:3[013-9]|5)|3[45]|43[013-79]|5(?:3[1-8]|4[1-7]|5)|6(?:3[0-35-9]|[4-6]))|2(?:1(?:3[178]|[45])|[24-689]|3[35]|7[457]))|7(?:14|23)4[0-8]|71(?:33|45)[1-79]', + ], + '8 ($1)', + , + 1, + ], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['7'], '8 ($1)', , 1], + [ + , + '(\\d{3})(\\d{3})(\\d{2})(\\d{2})', + '$1 $2-$3-$4', + ['[349]|8(?:[02-7]|1[1-8])'], + '8 ($1)', + , + 1, + ], + [, '(\\d{4})(\\d{4})(\\d{3})(\\d{3})', '$1 $2 $3 $4', ['8'], '8 ($1)'], + ], + [, , , , , , , , , [-1]], + 1, + '3[04-689]|[489]', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + RW: [ + , + [, , '(?:06|[27]\\d\\d|[89]00)\\d{6}', , , , , , , [8, 9]], + [, , '(?:06|2[23568]\\d)\\d{6}', , , , '250123456'], + [, , '7[2389]\\d{7}', , , , '720123456', , , [9]], + [, , '800\\d{6}', , , , '800123456', , , [9]], + [, , '900\\d{6}', , , , '900123456', , , [9]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'RW', + 250, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['0']], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['[7-9]'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['2']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + SA: [ + , + [, , '92\\d{7}|(?:[15]|8\\d)\\d{8}', , , , , , , [9, 10], [7]], + [ + , + , + '1(?:1\\d|2[24-8]|3[35-8]|4[3-68]|6[2-5]|7[235-7])\\d{6}', + , + , + , + '112345678', + , + , + [9], + [7], + ], + [, , '579[01]\\d{5}|5(?:[013-689]\\d|7[0-36-8])\\d{6}', , , , '512345678', , , [9]], + [, , '800\\d{7}', , , , '8001234567', , , [10]], + [, , '925\\d{6}', , , , '925012345', , , [9]], + [, , '920\\d{6}', , , , '920012345', , , [9]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'SA', + 966, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{4})(\\d{5})', '$1 $2', ['9']], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['1'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['5'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['81'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['8']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '811\\d{7}', , , , '8110123456', , , [10]], + , + , + [, , , , , , , , , [-1]], + ], + SB: [ + , + [, , '(?:[1-6]|[7-9]\\d\\d)\\d{4}', , , , , , , [5, 7]], + [, , '(?:1[4-79]|[23]\\d|4[0-2]|5[03]|6[0-37])\\d{3}', , , , '40123', , , [5]], + [ + , + , + '48\\d{3}|(?:(?:7[1-9]|8[4-9])\\d|9(?:1[2-9]|2[013-9]|3[0-2]|[46]\\d|5[0-46-9]|7[0-689]|8[0-79]|9[0-8]))\\d{4}', + , + , + , + '7421234', + ], + [, , '1[38]\\d{3}', , , , '18123', , , [5]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '5[12]\\d{3}', , , , '51123', , , [5]], + 'SB', + 677, + '0[01]', + , + , + , + , + , + , + , + [[, '(\\d{2})(\\d{5})', '$1 $2', ['7|8[4-9]|9(?:[1-8]|9[0-8])']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + SC: [ + , + [, , '8000\\d{3}|(?:[249]\\d|64)\\d{5}', , , , , , , [7]], + [, , '4[2-46]\\d{5}', , , , '4217123'], + [, , '2[5-8]\\d{5}', , , , '2510123'], + [, , '8000\\d{3}', , , , '8000000'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '971\\d{4}|(?:64|95)\\d{5}', , , , '6412345'], + 'SC', + 248, + '010|0[0-2]', + , + , + , + , + , + '00', + , + [[, '(\\d)(\\d{3})(\\d{3})', '$1 $2 $3', ['[246]|9[57]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + SD: [ + , + [, , '[19]\\d{8}', , , , , , , [9]], + [, , '1(?:5\\d|8[35-7])\\d{6}', , , , '153123456'], + [, , '(?:1[0-2]|9[0-3569])\\d{7}', , , , '911231234'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'SD', + 249, + '00', + '0', + , + , + '0', + , + , + , + [[, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['[19]'], '0$1']], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + SE: [ + , + [ + , + , + '(?:[26]\\d\\d|9)\\d{9}|[1-9]\\d{8}|[1-689]\\d{7}|[1-4689]\\d{6}|2\\d{5}', + , + , + , + , + , + , + [6, 7, 8, 9, 10, 12], + ], + [ + , + , + '(?:(?:[12][136]|3[356]|4[0246]|6[03]|8\\d)\\d|90[1-9])\\d{4,6}|(?:1(?:2[0-35]|4[0-4]|5[0-25-9]|7[13-6]|[89]\\d)|2(?:2[0-7]|4[0136-8]|5[0138]|7[018]|8[01]|9[0-57])|3(?:0[0-4]|1\\d|2[0-25]|4[056]|7[0-2]|8[0-3]|9[023])|4(?:1[013-8]|3[0135]|5[14-79]|7[0-246-9]|8[0156]|9[0-689])|5(?:0[0-6]|[15][0-5]|2[0-68]|3[0-4]|4\\d|6[03-5]|7[013]|8[0-79]|9[01])|6(?:1[1-3]|2[0-4]|4[02-57]|5[0-37]|6[0-3]|7[0-2]|8[0247]|9[0-356])|9(?:1[0-68]|2\\d|3[02-5]|4[0-3]|5[0-4]|[68][01]|7[0135-8]))\\d{5,6}', + , + , + , + '8123456', + , + , + [7, 8, 9], + ], + [, , '7[02369]\\d{7}', , , , '701234567', , , [9]], + [, , '20\\d{4,7}', , , , '20123456', , , [6, 7, 8, 9]], + [, , '649\\d{6}|9(?:00|39|44)[1-8]\\d{3,6}', , , , '9001234567', , , [7, 8, 9, 10]], + [, , '77[0-7]\\d{6}', , , , '771234567', , , [9]], + [, , '75[1-8]\\d{6}', , , , '751234567', , , [9]], + [, , , , , , , , , [-1]], + 'SE', + 46, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{2})(\\d{2,3})(\\d{2})', '$1-$2 $3', ['20'], '0$1'], + [, '(\\d{3})(\\d{4})', '$1-$2', ['9(?:00|39|44)'], '0$1'], + [ + , + '(\\d{2})(\\d{3})(\\d{2})', + '$1-$2 $3', + ['[12][136]|3[356]|4[0246]|6[03]|90[1-9]'], + '0$1', + ], + [, '(\\d)(\\d{2,3})(\\d{2})(\\d{2})', '$1-$2 $3 $4', ['8'], '0$1'], + [ + , + '(\\d{3})(\\d{2,3})(\\d{2})', + '$1-$2 $3', + [ + '1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])', + ], + '0$1', + ], + [, '(\\d{3})(\\d{2,3})(\\d{3})', '$1-$2 $3', ['9(?:00|39|44)'], '0$1'], + [ + , + '(\\d{2})(\\d{2,3})(\\d{2})(\\d{2})', + '$1-$2 $3 $4', + ['1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]'], + '0$1', + ], + [, '(\\d{2})(\\d{3})(\\d{2})(\\d{2})', '$1-$2 $3 $4', ['10|7'], '0$1'], + [, '(\\d)(\\d{3})(\\d{3})(\\d{2})', '$1-$2 $3 $4', ['8'], '0$1'], + [ + , + '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', + '$1-$2 $3 $4', + ['[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])'], + '0$1', + ], + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{3})', '$1-$2 $3 $4', ['9'], '0$1'], + [, '(\\d{3})(\\d{2})(\\d{3})(\\d{2})(\\d{2})', '$1-$2 $3 $4 $5', ['[26]'], '0$1'], + ], + [ + [, '(\\d{2})(\\d{2,3})(\\d{2})', '$1 $2 $3', ['20']], + [, '(\\d{3})(\\d{4})', '$1 $2', ['9(?:00|39|44)']], + [, '(\\d{2})(\\d{3})(\\d{2})', '$1 $2 $3', ['[12][136]|3[356]|4[0246]|6[03]|90[1-9]']], + [, '(\\d)(\\d{2,3})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['8']], + [ + , + '(\\d{3})(\\d{2,3})(\\d{2})', + '$1 $2 $3', + [ + '1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])', + ], + ], + [, '(\\d{3})(\\d{2,3})(\\d{3})', '$1 $2 $3', ['9(?:00|39|44)']], + [ + , + '(\\d{2})(\\d{2,3})(\\d{2})(\\d{2})', + '$1 $2 $3 $4', + ['1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]'], + ], + [, '(\\d{2})(\\d{3})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['10|7']], + [, '(\\d)(\\d{3})(\\d{3})(\\d{2})', '$1 $2 $3 $4', ['8']], + [ + , + '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', + '$1 $2 $3 $4', + ['[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])'], + ], + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{3})', '$1 $2 $3 $4', ['9']], + [, '(\\d{3})(\\d{2})(\\d{3})(\\d{2})(\\d{2})', '$1 $2 $3 $4 $5', ['[26]']], + ], + [, , '74[02-9]\\d{6}', , , , '740123456', , , [9]], + , + , + [, , , , , , , , , [-1]], + [, , '10[1-8]\\d{6}', , , , '102345678', , , [9]], + , + , + [, , '(?:25[245]|67[3-68])\\d{9}', , , , '254123456789', , , [12]], + ], + SG: [ + , + [, , '(?:(?:1\\d|8)\\d\\d|7000)\\d{7}|[3689]\\d{7}', , , , , , , [8, 10, 11]], + [ + , + , + '662[0-24-9]\\d{4}|6(?:[1-578]\\d|6[013-57-9]|9[0-35-9])\\d{5}', + , + , + , + '61234567', + , + , + [8], + ], + [ + , + , + '8(?:051|95[0-2])\\d{4}|(?:8(?:0[1-4]|[1-8]\\d|9[0-4])|9[0-8]\\d)\\d{5}', + , + , + , + '81234567', + , + , + [8], + ], + [, , '(?:18|8)00\\d{7}', , , , '18001234567', , , [10, 11]], + [, , '1900\\d{7}', , , , '19001234567', , , [11]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '(?:3[12]\\d|666)\\d{5}', , , , '31234567', , , [8]], + 'SG', + 65, + '0[0-3]\\d', + , + , + , + , + , + , + , + [ + [, '(\\d{4,5})', '$1', ['1[013-9]|77', '1(?:[013-8]|9(?:0[1-9]|[1-9]))|77']], + [, '(\\d{4})(\\d{4})', '$1 $2', ['[369]|8(?:0[1-5]|[1-9])']], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['8']], + [, '(\\d{4})(\\d{4})(\\d{3})', '$1 $2 $3', ['7']], + [, '(\\d{4})(\\d{3})(\\d{4})', '$1 $2 $3', ['1']], + ], + [ + [, '(\\d{4})(\\d{4})', '$1 $2', ['[369]|8(?:0[1-5]|[1-9])']], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['8']], + [, '(\\d{4})(\\d{4})(\\d{3})', '$1 $2 $3', ['7']], + [, '(\\d{4})(\\d{3})(\\d{4})', '$1 $2 $3', ['1']], + ], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '7000\\d{7}', , , , '70001234567', , , [11]], + , + , + [, , , , , , , , , [-1]], + ], + SH: [ + , + [, , '(?:[256]\\d|8)\\d{3}', , , , , , , [4, 5]], + [, , '2(?:[0-57-9]\\d|6[4-9])\\d\\d', , , , '22158'], + [, , '[56]\\d{4}', , , , '51234', , , [5]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '262\\d\\d', , , , '26212', , , [5]], + 'SH', + 290, + '00', + , + , + , + , + , + , + , + , + , + [, , , , , , , , , [-1]], + 1, + '[256]', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + SI: [ + , + [, , '[1-7]\\d{7}|8\\d{4,7}|90\\d{4,6}', , , , , , , [5, 6, 7, 8]], + [, , '(?:[1-357][2-8]|4[24-8])\\d{6}', , , , '12345678', , , [8], [7]], + [ + , + , + '65(?:1\\d|55|[67]0)\\d{4}|(?:[37][01]|4[0139]|51|6[489])\\d{6}', + , + , + , + '31234567', + , + , + [8], + ], + [, , '80\\d{4,6}', , , , '80123456', , , [6, 7, 8]], + [, , '89[1-3]\\d{2,5}|90\\d{4,6}', , , , '90123456'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [ + , + , + '(?:59\\d\\d|8(?:1(?:[67]\\d|8[0-489])|2(?:0\\d|2[0-37-9]|8[0-2489])|3[389]\\d))\\d{4}', + , + , + , + '59012345', + , + , + [8], + ], + 'SI', + 386, + '00|10(?:22|66|88|99)', + '0', + , + , + '0', + , + '00', + , + [ + [, '(\\d{2})(\\d{3,6})', '$1 $2', ['8[09]|9'], '0$1'], + [, '(\\d{3})(\\d{5})', '$1 $2', ['59|8'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{3})', '$1 $2 $3', ['[37][01]|4[0139]|51|6'], '0$1'], + [, '(\\d)(\\d{3})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[1-57]'], '(0$1)'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + SJ: [ + , + [, , '0\\d{4}|(?:[489]\\d|[57]9)\\d{6}', , , , , , , [5, 8]], + [, , '79\\d{6}', , , , '79123456', , , [8]], + [, , '(?:4[015-8]|59|9\\d)\\d{6}', , , , '41234567', , , [8]], + [, , '80[01]\\d{5}', , , , '80012345', , , [8]], + [, , '82[09]\\d{5}', , , , '82012345', , , [8]], + [, , '810(?:0[0-6]|[2-8]\\d)\\d{3}', , , , '81021234', , , [8]], + [, , '880\\d{5}', , , , '88012345', , , [8]], + [, , '85[0-5]\\d{5}', , , , '85012345', , , [8]], + 'SJ', + 47, + '00', + , + , + , + , + , + , + , + , + , + [, , , , , , , , , [-1]], + , + '79', + [, , , , , , , , , [-1]], + [, , '(?:0[2-9]|81(?:0(?:0[7-9]|1\\d)|5\\d\\d))\\d{3}', , , , '02000'], + , + , + [, , '81[23]\\d{5}', , , , '81212345', , , [8]], + ], + SK: [ + , + [, , '[2-689]\\d{8}|[2-59]\\d{6}|[2-5]\\d{5}', , , , , , , [6, 7, 9]], + [ + , + , + '(?:2(?:16|[2-9]\\d{3})|(?:(?:[3-5][1-8]\\d|819)\\d|601[1-5])\\d)\\d{4}|(?:2|[3-5][1-8])1[67]\\d{3}|[3-5][1-8]16\\d\\d', + , + , + , + '221234567', + ], + [ + , + , + '909[1-9]\\d{5}|9(?:0[1-8]|1[0-24-9]|4[03-57-9]|5\\d)\\d{6}', + , + , + , + '912123456', + , + , + [9], + ], + [, , '800\\d{6}', , , , '800123456', , , [9]], + [, , '9(?:00|[78]\\d)\\d{6}', , , , '900123456', , , [9]], + [, , '8[5-9]\\d{7}', , , , '850123456', , , [9]], + [, , , , , , , , , [-1]], + [, , '6(?:02|5[0-4]|9[0-6])\\d{6}', , , , '690123456', , , [9]], + 'SK', + 421, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d)(\\d{2})(\\d{3,4})', '$1 $2 $3', ['21'], '0$1'], + [, '(\\d{2})(\\d{2})(\\d{2,3})', '$1 $2 $3', ['[3-5][1-8]1', '[3-5][1-8]1[67]'], '0$1'], + [, '(\\d{4})(\\d{3})', '$1 $2', ['909', '9090'], '0$1'], + [, '(\\d)(\\d{3})(\\d{3})(\\d{2})', '$1/$2 $3 $4', ['2'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['[689]'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{2})(\\d{2})', '$1/$2 $3 $4', ['[3-5]'], '0$1'], + ], + [ + [, '(\\d)(\\d{2})(\\d{3,4})', '$1 $2 $3', ['21'], '0$1'], + [, '(\\d{2})(\\d{2})(\\d{2,3})', '$1 $2 $3', ['[3-5][1-8]1', '[3-5][1-8]1[67]'], '0$1'], + [, '(\\d)(\\d{3})(\\d{3})(\\d{2})', '$1/$2 $3 $4', ['2'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['[689]'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{2})(\\d{2})', '$1/$2 $3 $4', ['[3-5]'], '0$1'], + ], + [, , '9090\\d{3}', , , , '9090123', , , [7]], + , + , + [, , '9090\\d{3}|(?:602|8(?:00|[5-9]\\d)|9(?:00|[78]\\d))\\d{6}', , , , , , , [7, 9]], + [, , '96\\d{7}', , , , '961234567', , , [9]], + , + , + [, , , , , , , , , [-1]], + ], + SL: [ + , + [, , '(?:[237-9]\\d|66)\\d{6}', , , , , , , [8], [6]], + [, , '22[2-4][2-9]\\d{4}', , , , '22221234', , , , [6]], + [, , '(?:25|3[0-5]|66|7[3-9]|8[08]|9[09])\\d{6}', , , , '25123456'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'SL', + 232, + '00', + '0', + , + , + '0', + , + , + , + [[, '(\\d{2})(\\d{6})', '$1 $2', ['[236-9]'], '(0$1)']], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + SM: [ + , + [, , '(?:0549|[5-7]\\d)\\d{6}', , , , , , , [8, 10], [6]], + [, , '0549(?:8[0157-9]|9\\d)\\d{4}', , , , '0549886377', , , [10], [6]], + [, , '6[16]\\d{6}', , , , '66661212', , , [8]], + [, , , , , , , , , [-1]], + [, , '7[178]\\d{6}', , , , '71123456', , , [8]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '5[158]\\d{6}', , , , '58001110', , , [8]], + 'SM', + 378, + '00', + , + , + , + '([89]\\d{5})$', + '0549$1', + , + , + [ + [, '(\\d{6})', '$1', ['[89]']], + [, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[5-7]']], + [, '(\\d{4})(\\d{6})', '$1 $2', ['0']], + ], + [ + [, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[5-7]']], + [, '(\\d{4})(\\d{6})', '$1 $2', ['0']], + ], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + SN: [ + , + [, , '(?:[378]\\d|93)\\d{7}', , , , , , , [9]], + [, , '3(?:0(?:1[0-2]|80)|282|3(?:8[1-9]|9[3-9])|611)\\d{5}', , , , '301012345'], + [, , '75(?:01|[38]3)\\d{5}|7(?:[06-8]\\d|21|5[4-7]|90)\\d{6}', , , , '701234567'], + [, , '800\\d{6}', , , , '800123456'], + [, , '88[4689]\\d{6}', , , , '884123456'], + [, , '81[02468]\\d{6}', , , , '810123456'], + [, , , , , , , , , [-1]], + [, , '(?:3(?:392|9[01]\\d)\\d|93(?:3[13]0|929))\\d{4}', , , , '933301234'], + 'SN', + 221, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['8']], + [, '(\\d{2})(\\d{3})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[379]']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + SO: [ + , + [, , '[346-9]\\d{8}|[12679]\\d{7}|[1-5]\\d{6}|[1348]\\d{5}', , , , , , , [6, 7, 8, 9]], + [ + , + , + '(?:1\\d|2[0-79]|3[0-46-8]|4[0-7]|5[57-9])\\d{5}|(?:[134]\\d|8[125])\\d{4}', + , + , + , + '4012345', + , + , + [6, 7], + ], + [ + , + , + '(?:(?:15|(?:3[59]|4[89]|79|8[08])\\d|6(?:0[5-7]|[1-9]\\d)|9(?:0\\d|[2-9]))\\d|2(?:4\\d|8))\\d{5}|(?:6\\d|7[1-9])\\d{6}', + , + , + , + '71123456', + , + , + [7, 8, 9], + ], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'SO', + 252, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{2})(\\d{4})', '$1 $2', ['8[125]']], + [, '(\\d{6})', '$1', ['[134]']], + [, '(\\d)(\\d{6})', '$1 $2', ['[15]|2[0-79]|3[0-46-8]|4[0-7]']], + [, '(\\d)(\\d{7})', '$1 $2', ['24|[67]']], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['[3478]|64|90']], + [, '(\\d{2})(\\d{5,7})', '$1 $2', ['1|28|6(?:0[5-7]|[1-35-9])|9[2-9]']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + SR: [ + , + [, , '(?:[2-5]|68|[78]\\d)\\d{5}', , , , , , , [6, 7]], + [, , '(?:2[1-3]|3[0-7]|(?:4|68)\\d|5[2-58])\\d{4}', , , , '211234'], + [, , '(?:7[124-7]|8[124-9])\\d{5}', , , , '7412345', , , [7]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '56\\d{4}', , , , '561234', , , [6]], + 'SR', + 597, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{2})(\\d{2})(\\d{2})', '$1-$2-$3', ['56']], + [, '(\\d{3})(\\d{3})', '$1-$2', ['[2-5]']], + [, '(\\d{3})(\\d{4})', '$1-$2', ['[6-8]']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + SS: [ + , + [, , '[19]\\d{8}', , , , , , , [9]], + [, , '1[89]\\d{7}', , , , '181234567'], + [, , '(?:12|9[1257-9])\\d{7}', , , , '977123456'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'SS', + 211, + '00', + '0', + , + , + '0', + , + , + , + [[, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['[19]'], '0$1']], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + ST: [ + , + [, , '(?:22|9\\d)\\d{5}', , , , , , , [7]], + [, , '22\\d{5}', , , , '2221234'], + [, , '900[5-9]\\d{3}|9(?:0[1-9]|[89]\\d)\\d{4}', , , , '9812345'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'ST', + 239, + '00', + , + , + , + , + , + , + , + [[, '(\\d{3})(\\d{4})', '$1 $2', ['[29]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + SV: [ + , + [, , '[267]\\d{7}|[89]00\\d{4}(?:\\d{4})?', , , , , , , [7, 8, 11]], + [, , '2(?:[1-6]\\d{3}|[79]90[034]|890[0245])\\d{3}', , , , '21234567', , , [8]], + [ + , + , + '66(?:[02-9]\\d\\d|1(?:[02-9]\\d|16))\\d{3}|(?:6[0-57-9]|7\\d)\\d{6}', + , + , + , + '70123456', + , + , + [8], + ], + [, , '800\\d{4}(?:\\d{4})?', , , , '8001234', , , [7, 11]], + [, , '900\\d{4}(?:\\d{4})?', , , , '9001234', , , [7, 11]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'SV', + 503, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{3})(\\d{4})', '$1 $2', ['[89]']], + [, '(\\d{4})(\\d{4})', '$1 $2', ['[267]']], + [, '(\\d{3})(\\d{4})(\\d{4})', '$1 $2 $3', ['[89]']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + SX: [ + , + [, , '7215\\d{6}|(?:[58]\\d\\d|900)\\d{7}', , , , , , , [10], [7]], + [, , '7215(?:4[2-8]|8[239]|9[056])\\d{4}', , , , '7215425678', , , , [7]], + [, , '7215(?:1[02]|2\\d|5[034679]|8[014-8])\\d{4}', , , , '7215205678', , , , [7]], + [, , '8(?:00|33|44|55|66|77|88)[2-9]\\d{6}', , , , '8002123456'], + [, , '900[2-9]\\d{6}', , , , '9002123456'], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[12]|33|44|66|77|88)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , , , , , , , , [-1]], + 'SX', + 1, + '011', + '1', + , + , + '1|(5\\d{6})$', + '721$1', + , + , + , + , + [, , , , , , , , , [-1]], + , + '721', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + SY: [ + , + [, , '[1-39]\\d{8}|[1-5]\\d{7}', , , , , , , [8, 9], [6, 7]], + [ + , + , + '21\\d{6,7}|(?:1(?:[14]\\d|[2356])|2[235]|3(?:[13]\\d|4)|4[134]|5[1-3])\\d{6}', + , + , + , + '112345678', + , + , + , + [6, 7], + ], + [, , '9(?:22|[3-689]\\d)\\d{6}', , , , '944567890', , , [9]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'SY', + 963, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{2})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['[1-5]'], '0$1', , 1], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['9'], '0$1', , 1], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + SZ: [ + , + [, , '0800\\d{4}|(?:[237]\\d|900)\\d{6}', , , , , , , [8, 9]], + [, , '[23][2-5]\\d{6}', , , , '22171234', , , [8]], + [, , '7[6-9]\\d{6}', , , , '76123456', , , [8]], + [, , '0800\\d{4}', , , , '08001234', , , [8]], + [, , '900\\d{6}', , , , '900012345', , , [9]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '70\\d{6}', , , , '70012345', , , [8]], + 'SZ', + 268, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{4})(\\d{4})', '$1 $2', ['[0237]']], + [, '(\\d{5})(\\d{4})', '$1 $2', ['9']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , '0800\\d{4}', , , , , , , [8]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + TA: [ + , + [, , '8\\d{3}', , , , , , , [4]], + [, , '8\\d{3}', , , , '8999'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'TA', + 290, + '00', + , + , + , + , + , + , + , + , + , + [, , , , , , , , , [-1]], + , + '8', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + TC: [ + , + [, , '(?:[58]\\d\\d|649|900)\\d{7}', , , , , , , [10], [7]], + [, , '649(?:266|712|9(?:4\\d|50))\\d{4}', , , , '6497121234', , , , [7]], + [ + , + , + '649(?:2(?:3[129]|4[1-79])|3\\d\\d|4[34][1-3])\\d{4}', + , + , + , + '6492311234', + , + , + , + [7], + ], + [, , '8(?:00|33|44|55|66|77|88)[2-9]\\d{6}', , , , '8002345678'], + [, , '900[2-9]\\d{6}', , , , '9002345678'], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[12]|33|44|66|77|88)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , '649(?:71[01]|966)\\d{4}', , , , '6497101234', , , , [7]], + 'TC', + 1, + '011', + '1', + , + , + '1|([2-479]\\d{6})$', + '649$1', + , + , + , + , + [, , , , , , , , , [-1]], + , + '649', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + TD: [ + , + [, , '(?:22|[69]\\d|77)\\d{6}', , , , , , , [8]], + [, , '22(?:[37-9]0|5[0-5]|6[89])\\d{4}', , , , '22501234'], + [, , '(?:6[023568]|77|9\\d)\\d{6}', , , , '63012345'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'TD', + 235, + '00|16', + , + , + , + , + , + '00', + , + [[, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[2679]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + TG: [ + , + [, , '[279]\\d{7}', , , , , , , [8]], + [, , '2(?:2[2-7]|3[23]|4[45]|55|6[67]|77)\\d{5}', , , , '22212345'], + [, , '(?:7[09]|9[0-36-9])\\d{6}', , , , '90112345'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'TG', + 228, + '00', + , + , + , + , + , + , + , + [[, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[279]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + TH: [ + , + [, , '(?:001800|[2-57]|[689]\\d)\\d{7}|1\\d{7,9}', , , , , , , [8, 9, 10, 13]], + [, , '(?:1[0689]|2\\d|3[2-9]|4[2-5]|5[2-6]|7[3-7])\\d{6}', , , , '21234567', , , [8]], + [, , '671[0-8]\\d{5}|(?:14|6[1-6]|[89]\\d)\\d{7}', , , , '812345678', , , [9]], + [, , '(?:001800\\d|1800)\\d{6}', , , , '1800123456', , , [10, 13]], + [, , '1900\\d{6}', , , , '1900123456', , , [10]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '6[08]\\d{7}', , , , '601234567', , , [9]], + 'TH', + 66, + '00[1-9]', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d)(\\d{3})(\\d{4})', '$1 $2 $3', ['2'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['[13-9]'], '0$1'], + [, '(\\d{4})(\\d{3})(\\d{3})', '$1 $2 $3', ['1']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + TJ: [ + , + [, , '(?:00|[1-57-9]\\d)\\d{7}', , , , , , , [9], [3, 5, 6, 7]], + [ + , + , + '(?:3(?:1[3-5]|2[245]|3[12]|4[24-7]|5[25]|72)|4(?:46|74|87))\\d{6}', + , + , + , + '372123456', + , + , + , + [3, 5, 6, 7], + ], + [ + , + , + '41[18]\\d{6}|(?:[034]0|1[01]|2[02]|5[05]|7[017]|8[08]|9\\d)\\d{7}', + , + , + , + '917123456', + ], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'TJ', + 992, + '810', + , + , + , + , + , + '8~10', + , + [ + [, '(\\d{6})(\\d)(\\d{2})', '$1 $2 $3', ['331', '3317']], + [, '(\\d{3})(\\d{2})(\\d{4})', '$1 $2 $3', ['[34]7|91[78]']], + [, '(\\d{4})(\\d)(\\d{4})', '$1 $2 $3', ['3[1-5]']], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['[0-57-9]']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + TK: [ + , + [, , '[2-47]\\d{3,6}', , , , , , , [4, 5, 6, 7]], + [, , '(?:2[2-4]|[34]\\d)\\d{2,5}', , , , '3101'], + [, , '7[2-4]\\d{2,5}', , , , '7290'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'TK', + 690, + '00', + , + , + , + , + , + , + , + , + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + TL: [ + , + [, , '7\\d{7}|(?:[2-47]\\d|[89]0)\\d{5}', , , , , , , [7, 8]], + [, , '(?:2[1-5]|3[1-9]|4[1-4])\\d{5}', , , , '2112345', , , [7]], + [, , '7[2-8]\\d{6}', , , , '77212345', , , [8]], + [, , '80\\d{5}', , , , '8012345', , , [7]], + [, , '90\\d{5}', , , , '9012345', , , [7]], + [, , , , , , , , , [-1]], + [, , '70\\d{5}', , , , '7012345', , , [7]], + [, , , , , , , , , [-1]], + 'TL', + 670, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{3})(\\d{4})', '$1 $2', ['[2-489]|70']], + [, '(\\d{4})(\\d{4})', '$1 $2', ['7']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + TM: [ + , + [, , '[1-6]\\d{7}', , , , , , , [8]], + [ + , + , + '(?:1(?:2\\d|3[1-9])|2(?:22|4[0-35-8])|3(?:22|4[03-9])|4(?:22|3[128]|4\\d|6[15])|5(?:22|5[7-9]|6[014-689]))\\d{5}', + , + , + , + '12345678', + ], + [, , '6\\d{7}', , , , '66123456'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'TM', + 993, + '810', + '8', + , + , + '8', + , + '8~10', + , + [ + [, '(\\d{2})(\\d{2})(\\d{2})(\\d{2})', '$1 $2-$3-$4', ['12'], '(8 $1)'], + [, '(\\d{3})(\\d)(\\d{2})(\\d{2})', '$1 $2-$3-$4', ['[1-5]'], '(8 $1)'], + [, '(\\d{2})(\\d{6})', '$1 $2', ['6'], '8 $1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + TN: [ + , + [, , '[2-57-9]\\d{7}', , , , , , , [8]], + [, , '81200\\d{3}|(?:3[0-2]|7\\d)\\d{6}', , , , '30010123'], + [ + , + , + '3(?:001|[12]40)\\d{4}|(?:(?:[259]\\d|4[0-7])\\d|3(?:1[1-35]|6[0-4]|91))\\d{5}', + , + , + , + '20123456', + ], + [, , '8010\\d{4}', , , , '80101234'], + [, , '88\\d{6}', , , , '88123456'], + [, , '8[12]10\\d{4}', , , , '81101234'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'TN', + 216, + '00', + , + , + , + , + , + , + , + [[, '(\\d{2})(\\d{3})(\\d{3})', '$1 $2 $3', ['[2-57-9]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + TO: [ + , + [, , '(?:0800|(?:[5-8]\\d\\d|999)\\d)\\d{3}|[2-8]\\d{4}', , , , , , , [5, 7]], + [, , '(?:2\\d|3[0-8]|4[0-4]|50|6[09]|7[0-24-69]|8[05])\\d{3}', , , , '20123', , , [5]], + [ + , + , + '(?:55[4-6]|6(?:[09]\\d|3[02]|8[15-9])|(?:7\\d|8[46-9])\\d|999)\\d{4}', + , + , + , + '7715123', + , + , + [7], + ], + [, , '0800\\d{3}', , , , '0800222', , , [7]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '55[0-37-9]\\d{4}', , , , '5510123', , , [7]], + 'TO', + 676, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{2})(\\d{3})', '$1-$2', ['[2-4]|50|6[09]|7[0-24-69]|8[05]']], + [, '(\\d{4})(\\d{3})', '$1 $2', ['0']], + [, '(\\d{3})(\\d{4})', '$1 $2', ['[5-9]']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + TR: [ + , + [, , '4\\d{6}|8\\d{11,12}|(?:[2-58]\\d\\d|900)\\d{7}', , , , , , , [7, 10, 12, 13]], + [ + , + , + '(?:2(?:[13][26]|[28][2468]|[45][268]|[67][246])|3(?:[13][28]|[24-6][2468]|[78][02468]|92)|4(?:[16][246]|[23578][2468]|4[26]))\\d{7}', + , + , + , + '2123456789', + , + , + [10], + ], + [ + , + , + '56161\\d{5}|5(?:0[15-7]|1[06]|24|[34]\\d|5[1-59]|9[46])\\d{7}', + , + , + , + '5012345678', + , + , + [10], + ], + [, , '8(?:00\\d{7}(?:\\d{2,3})?|11\\d{7})', , , , '8001234567', , , [10, 12, 13]], + [, , '(?:8[89]8|900)\\d{7}', , , , '9001234567', , , [10]], + [, , , , , , , , , [-1]], + [, , '592(?:21[12]|461)\\d{4}', , , , '5922121234', , , [10]], + [, , '850\\d{7}', , , , '8500123456', , , [10]], + 'TR', + 90, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d)(\\d{3})', '$1 $2 $3', ['444'], , , 1], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['512|8[01589]|90'], '0$1', , 1], + [ + , + '(\\d{3})(\\d{3})(\\d{2})(\\d{2})', + '$1 $2 $3 $4', + ['5(?:[0-59]|61)', '5(?:[0-59]|616)', '5(?:[0-59]|6161)'], + '0$1', + , + 1, + ], + [ + , + '(\\d{3})(\\d{3})(\\d{2})(\\d{2})', + '$1 $2 $3 $4', + ['[24][1-8]|3[1-9]'], + '(0$1)', + , + 1, + ], + [, '(\\d{3})(\\d{3})(\\d{6,7})', '$1 $2 $3', ['80'], '0$1', , 1], + ], + [ + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['512|8[01589]|90'], '0$1', , 1], + [ + , + '(\\d{3})(\\d{3})(\\d{2})(\\d{2})', + '$1 $2 $3 $4', + ['5(?:[0-59]|61)', '5(?:[0-59]|616)', '5(?:[0-59]|6161)'], + '0$1', + , + 1, + ], + [ + , + '(\\d{3})(\\d{3})(\\d{2})(\\d{2})', + '$1 $2 $3 $4', + ['[24][1-8]|3[1-9]'], + '(0$1)', + , + 1, + ], + [, '(\\d{3})(\\d{3})(\\d{6,7})', '$1 $2 $3', ['80'], '0$1', , 1], + ], + [, , '512\\d{7}', , , , '5123456789', , , [10]], + , + , + [, , '(?:444|811\\d{3})\\d{4}', , , , , , , [7, 10]], + [, , '444\\d{4}', , , , '4441444', , , [7]], + , + , + [, , , , , , , , , [-1]], + ], + TT: [ + , + [, , '(?:[58]\\d\\d|900)\\d{7}', , , , , , , [10], [7]], + [ + , + , + '868(?:2(?:0[13]|1[89]|[23]\\d|4[0-2])|6(?:0[7-9]|1[02-8]|2[1-9]|[3-69]\\d|7[0-79])|82[124])\\d{4}', + , + , + , + '8682211234', + , + , + , + [7], + ], + [ + , + , + '868(?:(?:2[5-9]|3\\d)\\d|4(?:3[0-6]|[6-9]\\d)|6(?:20|78|8\\d)|7(?:0[1-9]|1[02-9]|[2-9]\\d))\\d{4}', + , + , + , + '8682911234', + , + , + , + [7], + ], + [, , '8(?:00|33|44|55|66|77|88)[2-9]\\d{6}', , , , '8002345678'], + [, , '900[2-9]\\d{6}', , , , '9002345678'], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[12]|33|44|66|77|88)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , , , , , , , , [-1]], + 'TT', + 1, + '011', + '1', + , + , + '1|([2-46-8]\\d{6})$', + '868$1', + , + , + , + , + [, , , , , , , , , [-1]], + , + '868', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , '868619\\d{4}', , , , '8686191234', , , , [7]], + ], + TV: [ + , + [, , '(?:2|7\\d\\d|90)\\d{4}', , , , , , , [5, 6, 7]], + [, , '2[02-9]\\d{3}', , , , '20123', , , [5]], + [, , '(?:7[01]\\d|90)\\d{4}', , , , '901234', , , [6, 7]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'TV', + 688, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{2})(\\d{3})', '$1 $2', ['2']], + [, '(\\d{2})(\\d{4})', '$1 $2', ['90']], + [, '(\\d{2})(\\d{5})', '$1 $2', ['7']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + TW: [ + , + [, , '[2-689]\\d{8}|7\\d{9,10}|[2-8]\\d{7}|2\\d{6}', , , , , , , [7, 8, 9, 10, 11]], + [ + , + , + '(?:2[2-8]\\d|370|55[01]|7[1-9])\\d{6}|4(?:(?:0(?:0[1-9]|[2-48]\\d)|1[023]\\d)\\d{4,5}|(?:[239]\\d\\d|4(?:0[56]|12|49))\\d{5})|6(?:[01]\\d{7}|4(?:0[56]|12|24|4[09])\\d{4,5})|8(?:(?:2(?:3\\d|4[0-269]|[578]0|66)|36[24-9]|90\\d\\d)\\d{4}|4(?:0[56]|12|24|4[09])\\d{4,5})|(?:2(?:2(?:0\\d\\d|4(?:0[68]|[249]0|3[0-467]|5[0-25-9]|6[0235689]))|(?:3(?:[09]\\d|1[0-4])|(?:4\\d|5[0-49]|6[0-29]|7[0-5])\\d)\\d)|(?:(?:3[2-9]|5[2-8]|6[0-35-79]|8[7-9])\\d\\d|4(?:2(?:[089]\\d|7[1-9])|(?:3[0-4]|[78]\\d|9[01])\\d))\\d)\\d{3}', + , + , + , + '221234567', + , + , + [8, 9], + ], + [, , '(?:40001[0-2]|9[0-8]\\d{4})\\d{3}', , , , '912345678', , , [9]], + [, , '80[0-79]\\d{6}|800\\d{5}', , , , '800123456', , , [8, 9]], + [, , '20(?:[013-9]\\d\\d|2)\\d{4}', , , , '203123456', , , [7, 9]], + [, , , , , , , , , [-1]], + [, , '99\\d{7}', , , , '990123456', , , [9]], + [ + , + , + '7010(?:[0-2679]\\d|3[0-7]|8[0-5])\\d{5}|70\\d{8}', + , + , + , + '7012345678', + , + , + [10, 11], + ], + 'TW', + 886, + '0(?:0[25-79]|19)', + '0', + '#', + , + '0', + , + , + , + [ + [, '(\\d{2})(\\d)(\\d{4})', '$1 $2 $3', ['202'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['[258]0'], '0$1'], + [ + , + '(\\d)(\\d{3,4})(\\d{4})', + '$1 $2 $3', + [ + '[23568]|4(?:0[02-48]|[1-47-9])|7[1-9]', + '[23568]|4(?:0[2-48]|[1-47-9])|(?:400|7)[1-9]', + ], + '0$1', + ], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['[49]'], '0$1'], + [, '(\\d{2})(\\d{4})(\\d{4,5})', '$1 $2 $3', ['7'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '50[0-46-9]\\d{6}', , , , '500123456', , , [9]], + , + , + [, , , , , , , , , [-1]], + ], + TZ: [ + , + [, , '(?:[26-8]\\d|41|90)\\d{7}', , , , , , , [9]], + [, , '2[2-8]\\d{7}', , , , '222345678'], + [, , '77[2-9]\\d{6}|(?:6[1-9]|7[1-689])\\d{7}', , , , '621234567'], + [, , '80[08]\\d{6}', , , , '800123456'], + [, , '90\\d{7}', , , , '900123456'], + [, , '8(?:40|6[01])\\d{6}', , , , '840123456'], + [, , , , , , , , , [-1]], + [, , '41\\d{7}', , , , '412345678'], + 'TZ', + 255, + '00[056]', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{2})(\\d{4})', '$1 $2 $3', ['[89]'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['[24]'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['[67]'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , '(?:8(?:[04]0|6[01])|90\\d)\\d{6}'], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + UA: [ + , + [, , '[89]\\d{9}|[3-9]\\d{8}', , , , , , , [9, 10], [5, 6, 7]], + [, , '(?:3[1-8]|4[13-8]|5[1-7]|6[12459])\\d{7}', , , , '311234567', , , [9], [5, 6, 7]], + [, , '(?:50|6[36-8]|7[1-3]|9[1-9])\\d{7}', , , , '501234567', , , [9]], + [, , '800[1-8]\\d{5,6}', , , , '800123456'], + [, , '900[239]\\d{5,6}', , , , '900212345'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '89[1-579]\\d{6}', , , , '891234567', , , [9]], + 'UA', + 380, + '00', + '0', + , + , + '0', + , + '0~0', + , + [ + [ + , + '(\\d{3})(\\d{3})(\\d{3})', + '$1 $2 $3', + [ + '6[12][29]|(?:3[1-8]|4[136-8]|5[12457]|6[49])2|(?:56|65)[24]', + '6[12][29]|(?:35|4[1378]|5[12457]|6[49])2|(?:56|65)[24]|(?:3[1-46-8]|46)2[013-9]', + ], + '0$1', + ], + [ + , + '(\\d{2})(\\d{3})(\\d{4})', + '$1 $2 $3', + [ + '4[45][0-5]|5(?:0|6[37])|6(?:[12][018]|[36-8])|7|89|9[1-9]|(?:48|57)[0137-9]', + '4[45][0-5]|5(?:0|6(?:3[14-7]|7))|6(?:[12][018]|[36-8])|7|89|9[1-9]|(?:48|57)[0137-9]', + ], + '0$1', + ], + [, '(\\d{4})(\\d{5})', '$1 $2', ['[3-6]'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['[89]'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + UG: [ + , + [, , '800\\d{6}|(?:[29]0|[347]\\d)\\d{7}', , , , , , , [9], [5, 6, 7]], + [ + , + , + '20(?:(?:(?:24|81)0|30[67])\\d|6(?:00[0-2]|30[0-4]))\\d{3}|(?:20(?:[0147]\\d|2[5-9]|32|5[0-4]|6[15-9])|[34]\\d{3})\\d{5}', + , + , + , + '312345678', + , + , + , + [5, 6, 7], + ], + [, , '726[01]\\d{5}|7(?:[0157-9]\\d|20|36|[46][0-4])\\d{6}', , , , '712345678'], + [, , '800[1-3]\\d{5}', , , , '800123456'], + [, , '90[1-3]\\d{6}', , , , '901123456'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'UG', + 256, + '00[057]', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{4})(\\d{5})', '$1 $2', ['202', '2024'], '0$1'], + [, '(\\d{3})(\\d{6})', '$1 $2', ['[27-9]|4(?:6[45]|[7-9])'], '0$1'], + [, '(\\d{2})(\\d{7})', '$1 $2', ['[34]'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + US: [ + , + [, , '[2-9]\\d{9}', , , , , , , [10], [7]], + [ + , + , + '5(?:05(?:[2-57-9]\\d\\d|6(?:[0-35-9]\\d|44))|82(?:2(?:0[0-3]|[268]2)|3(?:0[02]|33)|4(?:00|4[24]|65|82)|5(?:00|29|83)|6(?:00|66|82)|777|8(?:00|88)|9(?:00|9[89])))\\d{4}|(?:2(?:0[1-35-9]|1[02-9]|2[03-589]|3[149]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-57-9]|1[02-9]|2[01356]|3[0-24679]|4[167]|5[12]|6[014]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[39]|7[0589]|8[04])|5(?:0[1-47-9]|1[0235-8]|20|3[0149]|4[01]|5[19]|6[1-47]|7[0-5]|8[056])|6(?:0[1-35-9]|1[024-9]|2[03689]|[34][016]|5[0179]|6[0-279]|78|8[0-29])|7(?:0[1-46-8]|1[2-9]|2[04-7]|3[1247]|4[037]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[08]|3[0-289]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01579]|5[12469]|7[0-389]|8[04-69]))[2-9]\\d{6}', + , + , + , + '2015550123', + , + , + , + [7], + ], + [ + , + , + '5(?:05(?:[2-57-9]\\d\\d|6(?:[0-35-9]\\d|44))|82(?:2(?:0[0-3]|[268]2)|3(?:0[02]|33)|4(?:00|4[24]|65|82)|5(?:00|29|83)|6(?:00|66|82)|777|8(?:00|88)|9(?:00|9[89])))\\d{4}|(?:2(?:0[1-35-9]|1[02-9]|2[03-589]|3[149]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-57-9]|1[02-9]|2[01356]|3[0-24679]|4[167]|5[12]|6[014]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[39]|7[0589]|8[04])|5(?:0[1-47-9]|1[0235-8]|20|3[0149]|4[01]|5[19]|6[1-47]|7[0-5]|8[056])|6(?:0[1-35-9]|1[024-9]|2[03689]|[34][016]|5[0179]|6[0-279]|78|8[0-29])|7(?:0[1-46-8]|1[2-9]|2[04-7]|3[1247]|4[037]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[08]|3[0-289]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01579]|5[12469]|7[0-389]|8[04-69]))[2-9]\\d{6}', + , + , + , + '2015550123', + , + , + , + [7], + ], + [, , '8(?:00|33|44|55|66|77|88)[2-9]\\d{6}', , , , '8002345678'], + [, , '900[2-9]\\d{6}', , , , '9002345678'], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[12]|33|44|66|77|88)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , , , , , , , , [-1]], + 'US', + 1, + '011', + '1', + , + , + '1', + , + , + 1, + [ + [, '(\\d{3})(\\d{4})', '$1-$2', ['[2-9]']], + [, '(\\d{3})(\\d{3})(\\d{4})', '($1) $2-$3', ['[2-9]'], , , 1], + ], + [[, '(\\d{3})(\\d{3})(\\d{4})', '$1-$2-$3', ['[2-9]']]], + [, , , , , , , , , [-1]], + 1, + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + UY: [ + , + [, , '4\\d{9}|[1249]\\d{7}|(?:[49]\\d|80)\\d{5}', , , , , , , [7, 8, 10]], + [, , '(?:1(?:770|987)|(?:2\\d|4[2-7])\\d\\d)\\d{4}', , , , '21231234', , , [8], [7]], + [, , '9[1-9]\\d{6}', , , , '94231234', , , [8]], + [, , '(?:4\\d{5}|80[05])\\d{4}|405\\d{4}', , , , '8001234', , , [7, 10]], + [, , '90[0-8]\\d{4}', , , , '9001234', , , [7]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'UY', + 598, + '0(?:0|1[3-9]\\d)', + '0', + ' int. ', + , + '0', + , + '00', + , + [ + [, '(\\d{3})(\\d{4})', '$1 $2', ['405|8|90'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{3})', '$1 $2 $3', ['9'], '0$1'], + [, '(\\d{4})(\\d{4})', '$1 $2', ['[124]']], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['4'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + UZ: [ + , + [, , '(?:33|55|[679]\\d|88)\\d{7}', , , , , , , [9]], + [ + , + , + '(?:6(?:1(?:22|3[124]|4[1-4]|5[1-3578]|64)|2(?:22|3[0-57-9]|41)|5(?:22|3[3-7]|5[024-8])|6\\d\\d|7(?:[23]\\d|7[69])|9(?:22|4[1-8]|6[135]))|7(?:0(?:5[4-9]|6[0146]|7[124-6]|9[135-8])|(?:1[12]|8\\d)\\d|2(?:22|3[13-57-9]|4[1-3579]|5[14])|3(?:2\\d|3[1578]|4[1-35-7]|5[1-57]|61)|4(?:2\\d|3[1-579]|7[1-79])|5(?:22|5[1-9]|6[1457])|6(?:22|3[12457]|4[13-8])|9(?:22|5[1-9])))\\d{5}', + , + , + , + '669050123', + ], + [ + , + , + '(?:(?:33|88|9[0-57-9])\\d{3}|55(?:50[013]|90\\d)|6(?:1(?:2(?:2[01]|98)|35[0-4]|50\\d|61[23]|7(?:[01][017]|4\\d|55|9[5-9]))|2(?:(?:11|7\\d)\\d|2(?:[12]1|9[01379])|5(?:[126]\\d|3[0-4]))|5(?:19[01]|2(?:27|9[26])|(?:30|59|7\\d)\\d)|6(?:2(?:1[5-9]|2[0367]|38|41|52|60)|(?:3[79]|9[0-3])\\d|4(?:56|83)|7(?:[07]\\d|1[017]|3[07]|4[047]|5[057]|67|8[0178]|9[79]))|7(?:2(?:24|3[237]|4[5-9]|7[15-8])|5(?:7[12]|8[0589])|7(?:0\\d|[39][07])|9(?:0\\d|7[079]))|9(?:2(?:1[1267]|3[01]|5\\d|7[0-4])|(?:5[67]|7\\d)\\d|6(?:2[0-26]|8\\d)))|7(?:[07]\\d{3}|1(?:13[01]|6(?:0[47]|1[67]|66)|71[3-69]|98\\d)|2(?:2(?:2[79]|95)|3(?:2[5-9]|6[0-6])|57\\d|7(?:0\\d|1[17]|2[27]|3[37]|44|5[057]|66|88))|3(?:2(?:1[0-6]|21|3[469]|7[159])|(?:33|9[4-6])\\d|5(?:0[0-4]|5[579]|9\\d)|7(?:[0-3579]\\d|4[0467]|6[67]|8[078]))|4(?:2(?:29|5[0257]|6[0-7]|7[1-57])|5(?:1[0-4]|8\\d|9[5-9])|7(?:0\\d|1[024589]|2[0-27]|3[0137]|[46][07]|5[01]|7[5-9]|9[079])|9(?:7[015-9]|[89]\\d))|5(?:112|2(?:0\\d|2[29]|[49]4)|3[1568]\\d|52[6-9]|7(?:0[01578]|1[017]|[23]7|4[047]|[5-7]\\d|8[78]|9[079]))|6(?:2(?:2[1245]|4[2-4])|39\\d|41[179]|5(?:[349]\\d|5[0-2])|7(?:0[017]|[13]\\d|22|44|55|67|88))|9(?:22[128]|3(?:2[0-4]|7\\d)|57[02569]|7(?:2[05-9]|3[37]|4\\d|60|7[2579]|87|9[07]))))\\d{4}', + , + , + , + '912345678', + ], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'UZ', + 998, + '810', + '8', + , + , + '8', + , + '8~10', + , + [[, '(\\d{2})(\\d{3})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[35-9]'], '8 $1']], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + VA: [ + , + [ + , + , + '0\\d{5,10}|3[0-8]\\d{7,10}|55\\d{8}|8\\d{5}(?:\\d{2,4})?|(?:1\\d|39)\\d{7,8}', + , + , + , + , + , + , + [6, 7, 8, 9, 10, 11, 12], + ], + [, , '06698\\d{1,6}', , , , '0669812345', , , [6, 7, 8, 9, 10, 11]], + [, , '3[1-9]\\d{8}|3[2-9]\\d{7}', , , , '3123456789', , , [9, 10]], + [, , '80(?:0\\d{3}|3)\\d{3}', , , , '800123456', , , [6, 9]], + [ + , + , + '(?:0878\\d{3}|89(?:2\\d|3[04]|4(?:[0-4]|[5-9]\\d\\d)|5[0-4]))\\d\\d|(?:1(?:44|6[346])|89(?:38|5[5-9]|9))\\d{6}', + , + , + , + '899123456', + , + , + [6, 8, 9, 10], + ], + [, , '84(?:[08]\\d{3}|[17])\\d{3}', , , , '848123456', , , [6, 9]], + [, , '1(?:78\\d|99)\\d{6}', , , , '1781234567', , , [9, 10]], + [, , '55\\d{8}', , , , '5512345678', , , [10]], + 'VA', + 39, + '00', + , + , + , + , + , + , + , + , + , + [, , , , , , , , , [-1]], + , + '06698', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , '3[2-8]\\d{9,10}', , , , '33101234501', , , [11, 12]], + ], + VC: [ + , + [, , '(?:[58]\\d\\d|784|900)\\d{7}', , , , , , , [10], [7]], + [ + , + , + '784(?:266|3(?:6[6-9]|7\\d|8[0-6])|4(?:38|5[0-36-8]|8[0-8])|5(?:55|7[0-2]|93)|638|784)\\d{4}', + , + , + , + '7842661234', + , + , + , + [7], + ], + [ + , + , + '784(?:4(?:3[0-5]|5[45]|89|9[0-8])|5(?:2[6-9]|3[0-4])|720)\\d{4}', + , + , + , + '7844301234', + , + , + , + [7], + ], + [, , '8(?:00|33|44|55|66|77|88)[2-9]\\d{6}', , , , '8002345678'], + [, , '900[2-9]\\d{6}', , , , '9002345678'], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[12]|33|44|66|77|88)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , , , , , , , , [-1]], + 'VC', + 1, + '011', + '1', + , + , + '1|([2-7]\\d{6})$', + '784$1', + , + , + , + , + [, , , , , , , , , [-1]], + , + '784', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + VE: [ + , + [, , '[68]00\\d{7}|(?:[24]\\d|[59]0)\\d{8}', , , , , , , [10], [7]], + [ + , + , + '(?:2(?:12|3[457-9]|[467]\\d|[58][1-9]|9[1-6])|[4-6]00)\\d{7}', + , + , + , + '2121234567', + , + , + , + [7], + ], + [, , '4(?:1[24-8]|2[46])\\d{7}', , , , '4121234567'], + [, , '800\\d{7}', , , , '8001234567'], + [, , '90[01]\\d{7}', , , , '9001234567'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'VE', + 58, + '00', + '0', + , + , + '0', + , + , + , + [[, '(\\d{3})(\\d{7})', '$1-$2', ['[24-689]'], '0$1', '$CC $1']], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '501\\d{7}', , , , '5010123456', , , , [7]], + , + , + [, , , , , , , , , [-1]], + ], + VG: [ + , + [, , '(?:284|[58]\\d\\d|900)\\d{7}', , , , , , , [10], [7]], + [ + , + , + '284496[0-5]\\d{3}|284(?:229|4(?:22|9[45])|774|8(?:52|6[459]))\\d{4}', + , + , + , + '2842291234', + , + , + , + [7], + ], + [ + , + , + '284496[6-9]\\d{3}|284(?:245|3(?:0[0-3]|4[0-7]|68|9[34])|4(?:4[0-6]|68|99)|5(?:4[0-7]|68|9[69]))\\d{4}', + , + , + , + '2843001234', + , + , + , + [7], + ], + [, , '8(?:00|33|44|55|66|77|88)[2-9]\\d{6}', , , , '8002345678'], + [, , '900[2-9]\\d{6}', , , , '9002345678'], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[12]|33|44|66|77|88)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , , , , , , , , [-1]], + 'VG', + 1, + '011', + '1', + , + , + '1|([2-578]\\d{6})$', + '284$1', + , + , + , + , + [, , , , , , , , , [-1]], + , + '284', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + VI: [ + , + [, , '[58]\\d{9}|(?:34|90)0\\d{7}', , , , , , , [10], [7]], + [ + , + , + '340(?:2(?:0[0-38]|2[06-8]|4[49]|77)|3(?:32|44)|4(?:2[23]|44|7[34]|89)|5(?:1[34]|55)|6(?:2[56]|4[23]|77|9[023])|7(?:1[2-57-9]|2[57]|7\\d)|884|998)\\d{4}', + , + , + , + '3406421234', + , + , + , + [7], + ], + [ + , + , + '340(?:2(?:0[0-38]|2[06-8]|4[49]|77)|3(?:32|44)|4(?:2[23]|44|7[34]|89)|5(?:1[34]|55)|6(?:2[56]|4[23]|77|9[023])|7(?:1[2-57-9]|2[57]|7\\d)|884|998)\\d{4}', + , + , + , + '3406421234', + , + , + , + [7], + ], + [, , '8(?:00|33|44|55|66|77|88)[2-9]\\d{6}', , , , '8002345678'], + [, , '900[2-9]\\d{6}', , , , '9002345678'], + [, , , , , , , , , [-1]], + [ + , + , + '52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[12]|33|44|66|77|88)[2-9]\\d{6}', + , + , + , + '5002345678', + ], + [, , , , , , , , , [-1]], + 'VI', + 1, + '011', + '1', + , + , + '1|([2-9]\\d{6})$', + '340$1', + , + 1, + , + , + [, , , , , , , , , [-1]], + , + '340', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + VN: [ + , + [, , '[12]\\d{9}|[135-9]\\d{8}|[16]\\d{7}|[16-8]\\d{6}', , , , , , , [7, 8, 9, 10]], + [ + , + , + '2(?:0[3-9]|1[0-689]|2[0-25-9]|3[2-9]|4[2-8]|5[124-9]|6[0-39]|7[0-7]|8[2-79]|9[0-4679])\\d{7}', + , + , + , + '2101234567', + , + , + [10], + ], + [ + , + , + '(?:5(?:2[238]|59)|89[689]|99[013-9])\\d{6}|(?:3\\d|5[689]|7[06-9]|8[1-8]|9[0-8])\\d{7}', + , + , + , + '912345678', + , + , + [9], + ], + [, , '1800\\d{4,6}|12(?:0[13]|28)\\d{4}', , , , '1800123456', , , [8, 9, 10]], + [, , '1900\\d{4,6}', , , , '1900123456', , , [8, 9, 10]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '672\\d{6}', , , , '672012345', , , [9]], + 'VN', + 84, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{4})', '$1 $2', ['[17]99'], '0$1', , 1], + [, '(\\d{2})(\\d{5})', '$1 $2', ['80'], '0$1', , 1], + [, '(\\d{3})(\\d{4,5})', '$1 $2', ['69'], '0$1', , 1], + [, '(\\d{4})(\\d{4,6})', '$1 $2', ['1'], , , 1], + [, '(\\d{2})(\\d{3})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[69]'], '0$1', , 1], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['[3578]'], '0$1', , 1], + [, '(\\d{2})(\\d{4})(\\d{4})', '$1 $2 $3', ['2[48]'], '0$1', , 1], + [, '(\\d{3})(\\d{4})(\\d{3})', '$1 $2 $3', ['2'], '0$1', , 1], + ], + [ + [, '(\\d{2})(\\d{5})', '$1 $2', ['80'], '0$1', , 1], + [, '(\\d{4})(\\d{4,6})', '$1 $2', ['1'], , , 1], + [, '(\\d{2})(\\d{3})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['[69]'], '0$1', , 1], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['[3578]'], '0$1', , 1], + [, '(\\d{2})(\\d{4})(\\d{4})', '$1 $2 $3', ['2[48]'], '0$1', , 1], + [, '(\\d{3})(\\d{4})(\\d{3})', '$1 $2 $3', ['2'], '0$1', , 1], + ], + [, , , , , , , , , [-1]], + , + , + [, , '[17]99\\d{4}|69\\d{5,6}', , , , , , , [7, 8]], + [, , '(?:[17]99|80\\d)\\d{4}|69\\d{5,6}', , , , '1992000', , , [7, 8]], + , + , + [, , , , , , , , , [-1]], + ], + VU: [ + , + [, , '[57-9]\\d{6}|(?:[238]\\d|48)\\d{3}', , , , , , , [5, 7]], + [, , '(?:38[0-8]|48[4-9])\\d\\d|(?:2[02-9]|3[4-7]|88)\\d{3}', , , , '22123', , , [5]], + [, , '(?:[58]\\d|7[013-7])\\d{5}', , , , '5912345', , , [7]], + [, , '81[18]\\d\\d', , , , '81123', , , [5]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '9(?:0[1-9]|1[01])\\d{4}', , , , '9010123', , , [7]], + 'VU', + 678, + '00', + , + , + , + , + , + , + , + [[, '(\\d{3})(\\d{4})', '$1 $2', ['[57-9]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '(?:3[03]|900\\d)\\d{3}', , , , '30123'], + , + , + [, , , , , , , , , [-1]], + ], + WF: [ + , + [, , '(?:40|72)\\d{4}|8\\d{5}(?:\\d{3})?', , , , , , , [6, 9]], + [, , '72\\d{4}', , , , '721234', , , [6]], + [, , '(?:72|8[23])\\d{4}', , , , '821234', , , [6]], + [, , '80[0-5]\\d{6}', , , , '800012345', , , [9]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'WF', + 681, + '00', + , + , + , + , + , + , + , + [ + [, '(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3', ['[478]']], + [, '(\\d{3})(\\d{2})(\\d{2})(\\d{2})', '$1 $2 $3 $4', ['8']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , '[48]0\\d{4}', , , , '401234', , , [6]], + ], + WS: [ + , + [, , '(?:[2-6]|8\\d{5})\\d{4}|[78]\\d{6}|[68]\\d{5}', , , , , , , [5, 6, 7, 10]], + [, , '6[1-9]\\d{3}|(?:[2-5]|60)\\d{4}', , , , '22123', , , [5, 6]], + [, , '(?:7[1-35-7]|8(?:[3-7]|9\\d{3}))\\d{5}', , , , '7212345', , , [7, 10]], + [, , '800\\d{3}', , , , '800123', , , [6]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'WS', + 685, + '0', + , + , + , + , + , + , + , + [ + [, '(\\d{5})', '$1', ['[2-5]|6[1-9]']], + [, '(\\d{3})(\\d{3,7})', '$1 $2', ['[68]']], + [, '(\\d{2})(\\d{5})', '$1 $2', ['7']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + XK: [ + , + [, , '[23]\\d{7,8}|(?:4\\d\\d|[89]00)\\d{5}', , , , , , , [8, 9]], + [, , '(?:2[89]|39)0\\d{6}|[23][89]\\d{6}', , , , '28012345'], + [, , '4[3-9]\\d{6}', , , , '43201234', , , [8]], + [, , '800\\d{5}', , , , '80001234', , , [8]], + [, , '900\\d{5}', , , , '90001234', , , [8]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'XK', + 383, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{5})', '$1 $2', ['[89]'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{3})', '$1 $2 $3', ['[2-4]'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['[23]'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + YE: [ + , + [, , '(?:1|7\\d)\\d{7}|[1-7]\\d{6}', , , , , , , [7, 8, 9], [6]], + [ + , + , + '78[0-7]\\d{4}|17\\d{6}|(?:[12][2-68]|3[2358]|4[2-58]|5[2-6]|6[3-58]|7[24-6])\\d{5}', + , + , + , + '1234567', + , + , + [7, 8], + [6], + ], + [, , '7[0137]\\d{7}', , , , '712345678', , , [9]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'YE', + 967, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d)(\\d{3})(\\d{3,4})', '$1 $2 $3', ['[1-6]|7[24-68]'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['7'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + YT: [ + , + [, , '80\\d{7}|(?:26|63)9\\d{6}', , , , , , , [9]], + [, , '269(?:0[67]|5[0-3]|6\\d|[78]0)\\d{4}', , , , '269601234'], + [, , '639(?:0[0-79]|1[019]|[267]\\d|3[09]|40|5[05-9]|9[04-79])\\d{4}', , , , '639012345'], + [, , '80\\d{7}', , , , '801234567'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + 'YT', + 262, + '00', + '0', + , + , + '0', + , + , + , + , + , + [, , , , , , , , , [-1]], + , + '269|63', + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + ZA: [ + , + [, , '[1-79]\\d{8}|8\\d{4,9}', , , , , , , [5, 6, 7, 8, 9, 10]], + [ + , + , + '(?:2(?:0330|4302)|52087)0\\d{3}|(?:1[0-8]|2[1-378]|3[1-69]|4\\d|5[1346-8])\\d{7}', + , + , + , + '101234567', + , + , + [9], + ], + [ + , + , + '(?:1(?:3492[0-25]|4495[0235]|549(?:20|5[01]))|4[34]492[01])\\d{3}|8[1-4]\\d{3,7}|(?:2[27]|47|54)4950\\d{3}|(?:1(?:049[2-4]|9[12]\\d\\d)|(?:6\\d|7[0-46-9])\\d{3}|8(?:5\\d{3}|7(?:08[67]|158|28[5-9]|310)))\\d{4}|(?:1[6-8]|28|3[2-69]|4[025689]|5[36-8])4920\\d{3}|(?:12|[2-5]1)492\\d{4}', + , + , + , + '711234567', + , + , + [5, 6, 7, 8, 9], + ], + [, , '80\\d{7}', , , , '801234567', , , [9]], + [, , '(?:86[2-9]|9[0-2]\\d)\\d{6}', , , , '862345678', , , [9]], + [, , '860\\d{6}', , , , '860123456', , , [9]], + [, , , , , , , , , [-1]], + [ + , + , + '87(?:08[0-589]|15[0-79]|28[0-4]|31[1-9])\\d{4}|87(?:[02][0-79]|1[0-46-9]|3[02-9]|[4-9]\\d)\\d{5}', + , + , + , + '871234567', + , + , + [9], + ], + 'ZA', + 27, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{2})(\\d{3,4})', '$1 $2', ['8[1-4]'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{2,3})', '$1 $2 $3', ['8[1-4]'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['860'], '0$1'], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['[1-9]'], '0$1'], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['8'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '861\\d{6,7}', , , , '861123456', , , [9, 10]], + , + , + [, , , , , , , , , [-1]], + ], + ZM: [ + , + [, , '800\\d{6}|(?:21|63|[79]\\d)\\d{7}', , , , , , , [9], [6]], + [, , '21[1-8]\\d{6}', , , , '211234567', , , , [6]], + [, , '(?:7[679]|9[5-8])\\d{7}', , , , '955123456'], + [, , '800\\d{6}', , , , '800123456'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '63\\d{7}', , , , '630123456'], + 'ZM', + 260, + '00', + '0', + , + , + '0', + , + , + , + [ + [, '(\\d{3})(\\d{3})', '$1 $2', ['[1-9]']], + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['[28]'], '0$1'], + [, '(\\d{2})(\\d{7})', '$1 $2', ['[79]'], '0$1'], + ], + [ + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['[28]'], '0$1'], + [, '(\\d{2})(\\d{7})', '$1 $2', ['[79]'], '0$1'], + ], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + ZW: [ + , + [ + , + , + '2(?:[0-57-9]\\d{6,8}|6[0-24-9]\\d{6,7})|[38]\\d{9}|[35-8]\\d{8}|[3-6]\\d{7}|[1-689]\\d{6}|[1-3569]\\d{5}|[1356]\\d{4}', + , + , + , + , + , + , + [5, 6, 7, 8, 9, 10], + [3, 4], + ], + [ + , + , + '(?:1(?:(?:3\\d|9)\\d|[4-8])|2(?:(?:(?:0(?:2[014]|5)|(?:2[0157]|31|84|9)\\d\\d|[56](?:[14]\\d\\d|20)|7(?:[089]|2[03]|[35]\\d\\d))\\d|4(?:2\\d\\d|8))\\d|1(?:2|[39]\\d{4}))|3(?:(?:123|(?:29\\d|92)\\d)\\d\\d|7(?:[19]|[56]\\d))|5(?:0|1[2-478]|26|[37]2|4(?:2\\d{3}|83)|5(?:25\\d\\d|[78])|[689]\\d)|6(?:(?:[16-8]21|28|52[013])\\d\\d|[39])|8(?:[1349]28|523)\\d\\d)\\d{3}|(?:4\\d\\d|9[2-9])\\d{4,5}|(?:(?:2(?:(?:(?:0|8[146])\\d|7[1-7])\\d|2(?:[278]\\d|92)|58(?:2\\d|3))|3(?:[26]|9\\d{3})|5(?:4\\d|5)\\d\\d)\\d|6(?:(?:(?:[0-246]|[78]\\d)\\d|37)\\d|5[2-8]))\\d\\d|(?:2(?:[569]\\d|8[2-57-9])|3(?:[013-59]\\d|8[37])|6[89]8)\\d{3}', + , + , + , + '1312345', + , + , + , + [3, 4], + ], + [, , '7(?:[178]\\d|3[1-9])\\d{6}', , , , '712345678', , , [9]], + [, , '80(?:[01]\\d|20|8[0-8])\\d{3}', , , , '8001234', , , [7]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '86(?:1[12]|22|30|44|55|77|8[368])\\d{6}', , , , '8686123456', , , [10]], + 'ZW', + 263, + '00', + '0', + , + , + '0', + , + , + , + [ + [ + , + '(\\d{3})(\\d{3,5})', + '$1 $2', + [ + '2(?:0[45]|2[278]|[49]8)|3(?:[09]8|17)|6(?:[29]8|37|75)|[23][78]|(?:33|5[15]|6[68])[78]', + ], + '0$1', + ], + [, '(\\d)(\\d{3})(\\d{2,4})', '$1 $2 $3', ['[49]'], '0$1'], + [, '(\\d{3})(\\d{4})', '$1 $2', ['80'], '0$1'], + [ + , + '(\\d{2})(\\d{7})', + '$1 $2', + [ + '24|8[13-59]|(?:2[05-79]|39|5[45]|6[15-8])2', + '2(?:02[014]|4|[56]20|[79]2)|392|5(?:42|525)|6(?:[16-8]21|52[013])|8[13-59]', + ], + '(0$1)', + ], + [, '(\\d{2})(\\d{3})(\\d{4})', '$1 $2 $3', ['7'], '0$1'], + [ + , + '(\\d{3})(\\d{3})(\\d{3,4})', + '$1 $2 $3', + [ + '2(?:1[39]|2[0157]|[378]|[56][14])|3(?:12|29)', + '2(?:1[39]|2[0157]|[378]|[56][14])|3(?:123|29)', + ], + '0$1', + ], + [, '(\\d{4})(\\d{6})', '$1 $2', ['8'], '0$1'], + [ + , + '(\\d{2})(\\d{3,5})', + '$1 $2', + [ + '1|2(?:0[0-36-9]|12|29|[56])|3(?:1[0-689]|[24-6])|5(?:[0236-9]|1[2-4])|6(?:[013-59]|7[0-46-9])|(?:33|55|6[68])[0-69]|(?:29|3[09]|62)[0-79]', + ], + '0$1', + ], + [, '(\\d{2})(\\d{3})(\\d{3,4})', '$1 $2 $3', ['29[013-9]|39|54'], '0$1'], + [, '(\\d{4})(\\d{3,5})', '$1 $2', ['(?:25|54)8', '258|5483'], '0$1'], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + 800: [ + , + [, , '(?:005|[1-9]\\d\\d)\\d{5}', , , , , , , [8]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '(?:005|[1-9]\\d\\d)\\d{5}', , , , '12345678'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + '001', + 800, + , + , + , + , + , + , + , + 1, + [[, '(\\d{4})(\\d{4})', '$1 $2', ['\\d']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + 808: [ + , + [, , '[1-9]\\d{7}', , , , , , , [8]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '[1-9]\\d{7}', , , , '12345678'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + '001', + 808, + , + , + , + , + , + , + , + 1, + [[, '(\\d{4})(\\d{4})', '$1 $2', ['[1-9]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + 870: [ + , + [, , '7\\d{11}|[35-7]\\d{8}', , , , , , , [9, 12]], + [, , , , , , , , , [-1]], + [, , '(?:[356]|774[45])\\d{8}|7[6-8]\\d{7}', , , , '301234567'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + '001', + 870, + , + , + , + , + , + , + , + , + [[, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['[35-7]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + 878: [ + , + [, , '10\\d{10}', , , , , , , [12]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '10\\d{10}', , , , '101234567890'], + '001', + 878, + , + , + , + , + , + , + , + 1, + [[, '(\\d{2})(\\d{5})(\\d{5})', '$1 $2 $3', ['1']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + 881: [ + , + [, , '[0-36-9]\\d{8}', , , , , , , [9]], + [, , , , , , , , , [-1]], + [, , '[0-36-9]\\d{8}', , , , '612345678'], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + '001', + 881, + , + , + , + , + , + , + , + , + [[, '(\\d)(\\d{3})(\\d{5})', '$1 $2 $3', ['[0-36-9]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + 882: [ + , + [ + , + , + '[13]\\d{6}(?:\\d{2,5})?|285\\d{9}|(?:[19]\\d|49)\\d{6}', + , + , + , + , + , + , + [7, 8, 9, 10, 11, 12], + ], + [, , , , , , , , , [-1]], + [ + , + , + '342\\d{4}|(?:337|49)\\d{6}|3(?:2|47|7\\d{3})\\d{7}', + , + , + , + '3421234', + , + , + [7, 8, 9, 10, 12], + ], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [ + , + , + '1(?:3(?:0[0347]|[13][0139]|2[035]|4[013568]|6[0459]|7[06]|8[15-8]|9[0689])\\d{4}|6\\d{5,10})|(?:(?:285\\d\\d|3(?:45|[69]\\d{3}))\\d|9[89])\\d{6}', + , + , + , + '390123456789', + ], + '001', + 882, + , + , + , + , + , + , + , + , + [ + [, '(\\d{2})(\\d{5})', '$1 $2', ['16|342']], + [, '(\\d{2})(\\d{6})', '$1 $2', ['4']], + [, '(\\d{2})(\\d{2})(\\d{4})', '$1 $2 $3', ['[19]']], + [, '(\\d{2})(\\d{4})(\\d{3})', '$1 $2 $3', ['3[23]']], + [, '(\\d{2})(\\d{3,4})(\\d{4})', '$1 $2 $3', ['1']], + [, '(\\d{2})(\\d{4})(\\d{4})', '$1 $2 $3', ['34[57]']], + [, '(\\d{3})(\\d{4})(\\d{4})', '$1 $2 $3', ['34']], + [, '(\\d{2})(\\d{4,5})(\\d{5})', '$1 $2 $3', ['[1-3]']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , '348[57]\\d{7}', , , , '34851234567', , , [11]], + ], + 883: [ + , + [, , '(?:210|370\\d\\d)\\d{7}|51\\d{7}(?:\\d{3})?', , , , , , , [9, 10, 12]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '(?:210|(?:370[1-9]|51[013]0)\\d)\\d{7}|5100\\d{5}', , , , '510012345'], + '001', + 883, + , + , + , + , + , + , + , + 1, + [ + [, '(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3', ['510']], + [, '(\\d{3})(\\d{3})(\\d{4})', '$1 $2 $3', ['2']], + [, '(\\d{4})(\\d{4})(\\d{4})', '$1 $2 $3', ['51[13]']], + [, '(\\d{3})(\\d{3})(\\d{3})(\\d{3})', '$1 $2 $3 $4', ['[35]']], + ], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + 888: [ + , + [, , '\\d{11}', , , , , , , [11]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + '001', + 888, + , + , + , + , + , + , + , + 1, + [[, '(\\d{3})(\\d{3})(\\d{5})', '$1 $2 $3']], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , '\\d{11}', , , , '12345678901'], + , + , + [, , , , , , , , , [-1]], + ], + 979: [ + , + [, , '[1359]\\d{8}', , , , , , , [9], [8]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , '[1359]\\d{8}', , , , '123456789', , , , [8]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + '001', + 979, + , + , + , + , + , + , + , + 1, + [[, '(\\d)(\\d{4})(\\d{4})', '$1 $2 $3', ['[1359]']]], + , + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + [, , , , , , , , , [-1]], + , + , + [, , , , , , , , , [-1]], + ], + }; /* + + Copyright (C) 2010 The Libphonenumber Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + function H() { + this.g = {}; + } + H.g = void 0; + H.h = function () { + return H.g ? H.g : (H.g = new H()); + }; + var wa = { + 0: '0', + 1: '1', + 2: '2', + 3: '3', + 4: '4', + 5: '5', + 6: '6', + 7: '7', + 8: '8', + 9: '9', + '\uff10': '0', + '\uff11': '1', + '\uff12': '2', + '\uff13': '3', + '\uff14': '4', + '\uff15': '5', + '\uff16': '6', + '\uff17': '7', + '\uff18': '8', + '\uff19': '9', + '\u0660': '0', + '\u0661': '1', + '\u0662': '2', + '\u0663': '3', + '\u0664': '4', + '\u0665': '5', + '\u0666': '6', + '\u0667': '7', + '\u0668': '8', + '\u0669': '9', + '\u06f0': '0', + '\u06f1': '1', + '\u06f2': '2', + '\u06f3': '3', + '\u06f4': '4', + '\u06f5': '5', + '\u06f6': '6', + '\u06f7': '7', + '\u06f8': '8', + '\u06f9': '9', + }, + xa = { + 0: '0', + 1: '1', + 2: '2', + 3: '3', + 4: '4', + 5: '5', + 6: '6', + 7: '7', + 8: '8', + 9: '9', + '+': '+', + '*': '*', + '#': '#', + }, + ya = { + 0: '0', + 1: '1', + 2: '2', + 3: '3', + 4: '4', + 5: '5', + 6: '6', + 7: '7', + 8: '8', + 9: '9', + '\uff10': '0', + '\uff11': '1', + '\uff12': '2', + '\uff13': '3', + '\uff14': '4', + '\uff15': '5', + '\uff16': '6', + '\uff17': '7', + '\uff18': '8', + '\uff19': '9', + '\u0660': '0', + '\u0661': '1', + '\u0662': '2', + '\u0663': '3', + '\u0664': '4', + '\u0665': '5', + '\u0666': '6', + '\u0667': '7', + '\u0668': '8', + '\u0669': '9', + '\u06f0': '0', + '\u06f1': '1', + '\u06f2': '2', + '\u06f3': '3', + '\u06f4': '4', + '\u06f5': '5', + '\u06f6': '6', + '\u06f7': '7', + '\u06f8': '8', + '\u06f9': '9', + A: '2', + B: '2', + C: '2', + D: '3', + E: '3', + F: '3', + G: '4', + H: '4', + I: '4', + J: '5', + K: '5', + L: '5', + M: '6', + N: '6', + O: '6', + P: '7', + Q: '7', + R: '7', + S: '7', + T: '8', + U: '8', + V: '8', + W: '9', + X: '9', + Y: '9', + Z: '9', + }, + za = /[\d]+(?:[~\u2053\u223C\uFF5E][\d]+)?/, + Aa = RegExp('[+\uff0b]+'), + I = RegExp('^[+\uff0b]+'), + Ba = RegExp('([0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9])'), + Ca = RegExp('[+\uff0b0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]'), + Da = /[\\\/] *x/, + Ea = RegExp('[^0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9A-Za-z#]+$'), + Fa = /(?:.*?[A-Za-z]){3}.*/; + function J(a) { + return '([0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]{1,' + a + '})'; + } + function Ga() { + return ( + ';ext=' + + J('20') + + '|[ \u00a0\\t,]*(?:e?xt(?:ensi(?:o\u0301?|\u00f3))?n?|\uff45?\uff58\uff54\uff4e?|\u0434\u043e\u0431|anexo)[:\\.\uff0e]?[ \u00a0\\t,-]*' + + (J('20') + + '#?|[ \u00a0\\t,]*(?:[x\uff58#\uff03~\uff5e]|int|\uff49\uff4e\uff54)[:\\.\uff0e]?[ \u00a0\\t,-]*') + + (J('9') + '#?|[- ]+') + + (J('6') + '#|[ \u00a0\\t]*(?:,{2}|;)[:\\.\uff0e]?[ \u00a0\\t,-]*') + + (J('15') + '#?|[ \u00a0\\t]*(?:,)+[:\\.\uff0e]?[ \u00a0\\t,-]*') + + (J('9') + '#?') + ); + } + var Ha = new RegExp('(?:' + Ga() + ')$', 'i'), + Ia = new RegExp( + '^[0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]{2}$|^[+\uff0b]*(?:[-x\u2010-\u2015\u2212\u30fc\uff0d-\uff0f \u00a0\u00ad\u200b\u2060\u3000()\uff08\uff09\uff3b\uff3d.\\[\\]/~\u2053\u223c\uff5e*]*[0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]){3,}[-x\u2010-\u2015\u2212\u30fc\uff0d-\uff0f \u00a0\u00ad\u200b\u2060\u3000()\uff08\uff09\uff3b\uff3d.\\[\\]/~\u2053\u223c\uff5e*A-Za-z0-9\uff10-\uff19\u0660-\u0669\u06f0-\u06f9]*(?:' + + Ga() + + ')?$', + 'i', + ), + Ja = /(\$\d)/, + Ka = /^\(?\$1\)?$/; + function La(a) { + return 2 > a.length ? !1 : K(Ia, a); + } + function Ma(a) { + return K(Fa, a) ? L(a, ya) : L(a, wa); + } + function Na(a) { + var b = Ma(a.toString()); + A(a); + a.g(b); + } + function Oa() { + return Object.keys(G).filter(function (a) { + return isNaN(a); + }); + } + function Pa() { + return Object.keys(G) + .filter(function (a) { + return !isNaN(a); + }) + .map(function (a) { + return parseInt(a, 10); + }); + } + function Qa() { + var a = Object.keys(F); + return [ + ...Pa(), + ...a.map(function (b) { + return parseInt(b, 10); + }), + ]; + } + function Ra(a) { + return null != a && (1 != v(a, 9) || -1 != r(a, 9)[0]); + } + function L(a, b) { + for (var c = new z(), d, e = a.length, f = 0; f < e; ++f) + (d = a.charAt(f)), (d = b[d.toUpperCase()]), null != d && c.g(d); + return c.toString(); + } + function Sa(a) { + return 0 == a.length || Ka.test(a); + } + function M(a) { + return null != a && isNaN(a) && a.toUpperCase() in G; + } + function N(a, b, c) { + if (0 == n(b, 2) && m(b, 5)) { + var d = u(b, 5); + if (0 < d.length) return d; + } + d = u(b, 1); + var e = O(b); + if (0 == c) return Ta(d, 0, e, ''); + if (!(d in F)) return e; + a = P(a, d, R(d)); + b = Ua(b, a, c); + e = Va(e, a, c); + return Ta(d, c, e, b); + } + function P(a, b, c) { + return '001' == c ? S(a, '' + b) : S(a, c); + } + function Wa(a, b) { + var c = T; + if (!M(b)) return N(c, a, 1); + var d = u(a, 1), + e = O(a); + if (!(d in F)) return e; + if (1 == d) { + if (null != b && F[1].includes(b.toUpperCase())) return d + ' ' + N(c, a, 2); + } else if (d == Xa(c, b)) return N(c, a, 2); + var f = S(c, b), + g = u(f, 11); + b = ''; + m(f, 17) ? (b = u(f, 17)) : K(za, g) && (b = g); + c = P(c, d, R(d)); + e = Va(e, c, 1); + a = Ua(a, c, 1); + return 0 < b.length ? b + ' ' + d + ' ' + e + a : Ta(d, 1, e, a); + } + function O(a) { + if (!m(a, 2)) return ''; + var b = '' + n(a, 2); + return m(a, 4) && n(a, 4) && 0 < u(a, 8) ? Array(u(a, 8) + 1).join('0') + b : b; + } + function Ta(a, b, c, d) { + switch (b) { + case 0: + return '+' + a + c + d; + case 1: + return '+' + a + ' ' + c + d; + case 3: + return 'tel:+' + a + '-' + c + d; + default: + return c + d; + } + } + function Va(a, b, c) { + a: { + b = 0 == r(b, 20).length || 2 == c ? r(b, 19) : r(b, 20); + for (var d, e = b.length, f = 0; f < e; ++f) { + d = b[f]; + var g = v(d, 3); + if (0 == g || 0 == a.search(n(d, 3, g - 1))) + if (((g = new RegExp(n(d, 1))), K(g, a))) { + b = d; + break a; + } + } + b = null; + } + null == b + ? (c = a) + : ((e = b), + (b = u(e, 2)), + (d = new RegExp(n(e, 1))), + u(e, 5), + (e = u(e, 4)), + (a = + 2 == c && null != e && 0 < e.length ? a.replace(d, b.replace(Ja, e)) : a.replace(d, b)), + 3 == c && + ((a = a.replace( + RegExp( + '^[-x\u2010-\u2015\u2212\u30fc\uff0d-\uff0f \u00a0\u00ad\u200b\u2060\u3000()\uff08\uff09\uff3b\uff3d.\\[\\]/~\u2053\u223c\uff5e]+', + ), + '', + )), + (a = a.replace( + RegExp( + '[-x\u2010-\u2015\u2212\u30fc\uff0d-\uff0f \u00a0\u00ad\u200b\u2060\u3000()\uff08\uff09\uff3b\uff3d.\\[\\]/~\u2053\u223c\uff5e]+', + 'g', + ), + '-', + ))), + (c = a)); + return c; + } + function Ya(a, b) { + var c = T; + if (!M(a)) return null; + b = Za(S(c, a), b); + try { + if (m(b, 6)) { + var d = n(b, 6); + return $a(c, d, a); + } + } catch (e) {} + return null; + } + function Ua(a, b, c) { + return m(a, 3) && 0 != n(a, 3).length + ? 3 == c + ? ';ext=' + n(a, 3) + : m(b, 13) + ? n(b, 13) + u(a, 3) + : ' ext. ' + u(a, 3) + : ''; + } + function Za(a, b) { + switch (b) { + case 4: + return n(a, 5); + case 3: + return n(a, 4); + case 1: + return n(a, 3); + case 0: + case 2: + return n(a, 2); + case 5: + return n(a, 6); + case 6: + return n(a, 8); + case 7: + return n(a, 7); + case 8: + return n(a, 21); + case 9: + return n(a, 25); + case 10: + return n(a, 28); + default: + return n(a, 1); + } + } + function ab(a, b) { + return U(a, n(b, 1)) + ? U(a, n(b, 5)) + ? 4 + : U(a, n(b, 4)) + ? 3 + : U(a, n(b, 6)) + ? 5 + : U(a, n(b, 8)) + ? 6 + : U(a, n(b, 7)) + ? 7 + : U(a, n(b, 21)) + ? 8 + : U(a, n(b, 25)) + ? 9 + : U(a, n(b, 28)) + ? 10 + : U(a, n(b, 2)) + ? n(b, 18) || U(a, n(b, 3)) + ? 2 + : 0 + : !n(b, 18) && U(a, n(b, 3)) + ? 1 + : -1 + : -1; + } + function S(a, b) { + if (null == b) return null; + b = b.toUpperCase(); + var c = a.g[b]; + if (null == c) { + c = G[b]; + if (null == c) return null; + c = new y().g(D.m(), c); + a.g[b] = c; + } + return c; + } + function U(a, b) { + var c = a.length; + return 0 < v(b, 9) && -1 == r(b, 9).indexOf(c) ? !1 : K(u(b, 2), a); + } + function bb(a) { + var b = T, + c = cb(b, a); + var d = u(a, 1); + var e = P(b, d, c); + null == e || ('001' != c && d != Xa(b, c)) ? (e = !1) : ((a = O(a)), (e = -1 != ab(a, e))); + return e; + } + function cb(a, b) { + if (null == b) return null; + var c = u(b, 1); + c = F[c]; + if (null == c) a = null; + else if (1 == c.length) a = c[0]; + else + a: { + b = O(b); + for (var d, e = c.length, f = 0; f < e; f++) { + d = c[f]; + var g = S(a, d); + if (m(g, 23)) { + if (0 == b.search(n(g, 23))) { + a = d; + break a; + } + } else if (-1 != ab(b, g)) { + a = d; + break a; + } + } + a = null; + } + return a; + } + function R(a) { + a = F[a]; + return null == a ? 'ZZ' : a[0]; + } + function Xa(a, b) { + a = S(a, b); + if (null == a) throw Error('Invalid region code: ' + b); + return u(a, 10); + } + function db(a) { + a = eb(a); + return 0 == a || 4 == a; + } + function fb(a, b, c, d) { + var e = Za(c, d), + f = 0 == v(e, 9) ? r(n(c, 1), 9) : r(e, 9); + e = r(e, 10); + if (2 == d) + if (Ra(Za(c, 0))) + (a = Za(c, 1)), + Ra(a) && + ((f = f.concat(0 == v(a, 9) ? r(n(c, 1), 9) : r(a, 9))), + f.sort(), + 0 == e.length ? (e = r(a, 10)) : ((e = e.concat(r(a, 10))), e.sort())); + else return fb(a, b, c, 1); + if (-1 == f[0]) return 5; + b = b.length; + if (-1 < e.indexOf(b)) return 4; + c = f[0]; + return c == b ? 0 : c > b ? 2 : f[f.length - 1] < b ? 3 : -1 < f.indexOf(b, 1) ? 0 : 5; + } + function eb(a) { + var b = T, + c = O(a); + a = u(a, 1); + if (!(a in F)) return 1; + a = P(b, a, R(a)); + return fb(b, c, a, -1); + } + function gb(a, b) { + a = a.toString(); + if (0 == a.length || '0' == a.charAt(0)) return 0; + for (var c, d = a.length, e = 1; 3 >= e && e <= d; ++e) + if (((c = parseInt(a.substring(0, e), 10)), c in F)) return b.g(a.substring(e)), c; + return 0; + } + function hb(a, b, c, d, e) { + if (0 == b.length) return 0; + b = new z(b); + var f; + null != c && (f = n(c, 11)); + null == f && (f = 'NonMatch'); + var g = b.toString(); + if (0 == g.length) f = 20; + else if (I.test(g)) (g = g.replace(I, '')), A(b), b.g(Ma(g)), (f = 1); + else { + g = new RegExp(f); + Na(b); + f = b.toString(); + if (0 == f.search(g)) { + g = f.match(g)[0].length; + var l = f.substring(g).match(Ba); + l && null != l[1] && 0 < l[1].length && '0' == L(l[1], wa) + ? (f = !1) + : (A(b), b.g(f.substring(g)), (f = !0)); + } else f = !1; + f = f ? 5 : 20; + } + if (20 != f) { + if (2 >= b.h.length) throw Error('Phone number too short after IDD'); + a = gb(b, d); + if (0 != a) return p(e, 1, a), a; + throw Error('Invalid country calling code'); + } + if ( + null != c && + ((f = u(c, 10)), + (g = '' + f), + (l = b.toString()), + 0 == l.lastIndexOf(g, 0) && + ((g = new z(l.substring(g.length))), + (l = n(c, 1)), + (l = new RegExp(u(l, 2))), + ib(g, c, null), + (g = g.toString()), + (!K(l, b.toString()) && K(l, g)) || 3 == fb(a, b.toString(), c, -1))) + ) + return d.g(g), p(e, 1, f), f; + p(e, 1, 0); + return 0; + } + function ib(a, b, c) { + var d = a.toString(), + e = d.length, + f = n(b, 15); + if (0 != e && null != f && 0 != f.length) { + var g = new RegExp('^(?:' + f + ')'); + if ((e = g.exec(d))) { + f = new RegExp(u(n(b, 1), 2)); + var l = K(f, d), + q = e.length - 1; + b = n(b, 16); + if (null == b || 0 == b.length || null == e[q] || 0 == e[q].length) { + if (!l || K(f, d.substring(e[0].length))) + null != c && 0 < q && null != e[q] && c.g(e[1]), a.set(d.substring(e[0].length)); + } else if (((d = d.replace(g, b)), !l || K(f, d))) + null != c && 0 < q && c.g(e[1]), a.set(d); + } + } + } + function $a(a, b, c) { + if (null == b) throw Error('The string supplied did not seem to be a phone number'); + if (250 < b.length) throw Error('The string supplied is too long to be a phone number'); + var d = new z(), + e = b.indexOf(';phone-context='); + if (0 <= e) { + var f = e + 15; + if ('+' == b.charAt(f)) { + var g = b.indexOf(';', f); + 0 < g ? d.g(b.substring(f, g)) : d.g(b.substring(f)); + } + f = b.indexOf('tel:'); + d.g(b.substring(0 <= f ? f + 4 : 0, e)); + } else + (e = d.g), + (f = b.search(Ca)), + 0 <= f + ? ((b = b.substring(f)), + (b = b.replace(Ea, '')), + (f = b.search(Da)), + 0 <= f && (b = b.substring(0, f))) + : (b = ''), + e.call(d, b); + b = d.toString(); + e = b.indexOf(';isub='); + 0 < e && (A(d), d.g(b.substring(0, e))); + if (!La(d.toString())) throw Error('The string supplied did not seem to be a phone number'); + b = d.toString(); + if (!(M(c) || (null != b && 0 < b.length && I.test(b)))) + throw Error('Invalid country calling code'); + b = new E(); + a: { + e = d.toString(); + f = e.search(Ha); + if (0 <= f && La(e.substring(0, f))) { + g = e.match(Ha); + for (var l = g.length, q = 1; q < l; ++q) + if (null != g[q] && 0 < g[q].length) { + A(d); + d.g(e.substring(0, f)); + e = g[q]; + break a; + } + } + e = ''; + } + 0 < e.length && p(b, 3, e); + f = S(a, c); + e = new z(); + g = 0; + l = d.toString(); + try { + g = hb(a, l, f, e, b); + } catch (Q) { + if ('Invalid country calling code' == Q.message && I.test(l)) { + if (((l = l.replace(I, '')), (g = hb(a, l, f, e, b)), 0 == g)) throw Q; + } else throw Q; + } + 0 != g + ? ((d = R(g)), d != c && (f = P(a, g, d))) + : (Na(d), e.g(d.toString()), null != c && ((g = u(f, 10)), p(b, 1, g))); + if (2 > e.h.length) throw Error('The string supplied is too short to be a phone number'); + null != f && + ((c = new z(e.toString())), + ib(c, f, new z()), + (a = fb(a, c.toString(), f, -1)), + 2 != a && 4 != a && 5 != a && (e = c)); + a = e.toString(); + c = a.length; + if (2 > c) throw Error('The string supplied is too short to be a phone number'); + if (17 < c) throw Error('The string supplied is too long to be a phone number'); + if (1 < a.length && '0' == a.charAt(0)) { + p(b, 4, !0); + for (c = 1; c < a.length - 1 && '0' == a.charAt(c); ) c++; + 1 != c && p(b, 8, c); + } + p(b, 2, parseInt(a, 10)); + return b; + } + H.prototype.ia = function (a) { + var b = S(this, cb(this, a)); + if (null == b) return !0; + a = O(a); + return !U(a, n(b, 24)); + }; + function K(a, b) { + return (a = 'string' == typeof a ? b.match('^(?:' + a + ')$') : b.match(a)) && + a[0].length == b.length + ? !0 + : !1; + } + function jb(a) { + this.ja = RegExp('\u2008'); + this.ka = ''; + this.v = new z(); + this.ca = ''; + this.s = new z(); + this.aa = new z(); + this.u = !0; + this.da = this.ba = this.na = !1; + this.oa = H.h(); + this.$ = 0; + this.h = new z(); + this.ga = !1; + this.o = ''; + this.g = new z(); + this.j = []; + this.la = a; + this.va = this.l = kb(this, this.la); + } + var lb = new D(); + p(lb, 11, 'NA'); + var mb = RegExp( + '^[-x\u2010-\u2015\u2212\u30fc\uff0d-\uff0f \u00a0\u00ad\u200b\u2060\u3000()\uff08\uff09\uff3b\uff3d.\\[\\]/~\u2053\u223c\uff5e]*\\$1[-x\u2010-\u2015\u2212\u30fc\uff0d-\uff0f \u00a0\u00ad\u200b\u2060\u3000()\uff08\uff09\uff3b\uff3d.\\[\\]/~\u2053\u223c\uff5e]*(\\$\\d[-x\u2010-\u2015\u2212\u30fc\uff0d-\uff0f \u00a0\u00ad\u200b\u2060\u3000()\uff08\uff09\uff3b\uff3d.\\[\\]/~\u2053\u223c\uff5e]*)*$', + ), + nb = /[- ]/; + function kb(a, b) { + var c = a.oa; + b = M(b) ? Xa(c, b) : 0; + a = S(a.oa, R(b)); + return null != a ? a : lb; + } + function ob(a) { + for (var b = a.j.length, c = 0; c < b; ++c) { + var d = a.j[c], + e = u(d, 1); + if (a.ca == e) return !1; + var f = a; + var g = d, + l = u(g, 1); + A(f.v); + var q = f; + g = u(g, 2); + var Q = '999999999999999'.match(l)[0]; + Q.length < q.g.h.length + ? (q = '') + : ((q = Q.replace(new RegExp(l, 'g'), g)), (q = q.replace(RegExp('9', 'g'), '\u2008'))); + 0 < q.length ? (f.v.g(q), (f = !0)) : (f = !1); + if (f) return (a.ca = e), (a.ga = nb.test(n(d, 4))), (a.$ = 0), !0; + } + return (a.u = !1); + } + function pb(a, b) { + for (var c = [], d = b.length - 3, e = a.j.length, f = 0; f < e; ++f) { + var g = a.j[f]; + 0 == v(g, 3) + ? c.push(a.j[f]) + : ((g = n(g, 3, Math.min(d, v(g, 3) - 1))), 0 == b.search(g) && c.push(a.j[f])); + } + a.j = c; + } + function qb(a, b) { + a.s.g(b); + var c = b; + Ba.test(c) || (1 == a.s.h.length && Aa.test(c)) + ? ('+' == b ? ((c = b), a.aa.g(b)) : ((c = wa[b]), a.aa.g(c), a.g.g(c)), (b = c)) + : ((a.u = !1), (a.na = !0)); + if (!a.u) { + if (!a.na) + if (rb(a)) { + if (sb(a)) return tb(a); + } else if ( + (0 < a.o.length && + ((b = a.g.toString()), + A(a.g), + a.g.g(a.o), + a.g.g(b), + (b = a.h.toString()), + (c = b.lastIndexOf(a.o)), + A(a.h), + a.h.g(b.substring(0, c))), + a.o != ub(a)) + ) + return a.h.g(' '), tb(a); + return a.s.toString(); + } + switch (a.aa.h.length) { + case 0: + case 1: + case 2: + return a.s.toString(); + case 3: + if (rb(a)) a.da = !0; + else return (a.o = ub(a)), vb(a); + default: + if (a.da) return sb(a) && (a.da = !1), a.h.toString() + a.g.toString(); + if (0 < a.j.length) { + b = wb(a, b); + c = xb(a); + if (0 < c.length) return c; + pb(a, a.g.toString()); + return ob(a) ? yb(a) : a.u ? zb(a, b) : a.s.toString(); + } + return vb(a); + } + } + function tb(a) { + a.u = !0; + a.da = !1; + a.j = []; + a.$ = 0; + A(a.v); + a.ca = ''; + return vb(a); + } + function xb(a) { + for (var b = a.g.toString(), c = a.j.length, d = 0; d < c; ++d) { + var e = a.j[d], + f = u(e, 1); + if ( + new RegExp('^(?:' + f + ')$').test(b) && + ((a.ga = nb.test(n(e, 4))), + (e = b.replace(new RegExp(f, 'g'), n(e, 2))), + (e = zb(a, e)), + L(e, xa) == a.aa) + ) + return e; + } + return ''; + } + function zb(a, b) { + var c = a.h.h.length; + return a.ga && 0 < c && ' ' != a.h.toString().charAt(c - 1) ? a.h + ' ' + b : a.h + b; + } + function vb(a) { + var b = a.g.toString(); + if (3 <= b.length) { + for ( + var c = a.ba && 0 == a.o.length && 0 < v(a.l, 20) ? r(a.l, 20) : r(a.l, 19), + d = c.length, + e = 0; + e < d; + ++e + ) { + var f = c[e]; + (0 < a.o.length && Sa(u(f, 4)) && !n(f, 6) && !m(f, 5)) || + ((0 != a.o.length || a.ba || Sa(u(f, 4)) || n(f, 6)) && + mb.test(u(f, 2)) && + a.j.push(f)); + } + pb(a, b); + b = xb(a); + return 0 < b.length ? b : ob(a) ? yb(a) : a.s.toString(); + } + return zb(a, b); + } + function yb(a) { + var b = a.g.toString(), + c = b.length; + if (0 < c) { + for (var d = '', e = 0; e < c; e++) d = wb(a, b.charAt(e)); + return a.u ? zb(a, d) : a.s.toString(); + } + return a.h.toString(); + } + function ub(a) { + var b = a.g.toString(), + c = 0; + if (1 != a.l.ha()) var d = !1; + else + (d = a.g.toString()), (d = '1' == d.charAt(0) && '0' != d.charAt(1) && '1' != d.charAt(1)); + d + ? ((c = 1), a.h.g('1').g(' '), (a.ba = !0)) + : m(a.l, 15) && + ((d = new RegExp('^(?:' + n(a.l, 15) + ')')), + (d = b.match(d)), + null != d && + null != d[0] && + 0 < d[0].length && + ((a.ba = !0), (c = d[0].length), a.h.g(b.substring(0, c)))); + A(a.g); + a.g.g(b.substring(c)); + return b.substring(0, c); + } + function rb(a) { + var b = a.aa.toString(), + c = new RegExp('^(?:\\+|' + n(a.l, 11) + ')'); + c = b.match(c); + return null != c && null != c[0] && 0 < c[0].length + ? ((a.ba = !0), + (c = c[0].length), + A(a.g), + a.g.g(b.substring(c)), + A(a.h), + a.h.g(b.substring(0, c)), + '+' != b.charAt(0) && a.h.g(' '), + !0) + : !1; + } + function sb(a) { + if (0 == a.g.h.length) return !1; + var b = new z(), + c = gb(a.g, b); + if (0 == c) return !1; + A(a.g); + a.g.g(b.toString()); + b = R(c); + '001' == b ? (a.l = S(a.oa, '' + c)) : b != a.la && (a.l = kb(a, b)); + a.h.g('' + c).g(' '); + a.o = ''; + return !0; + } + function wb(a, b) { + var c = a.v.toString(); + if (0 <= c.substring(a.$).search(a.ja)) { + var d = c.search(a.ja); + b = c.replace(a.ja, b); + A(a.v); + a.v.g(b); + a.$ = d; + return b.substring(0, a.$ + 1); + } + 1 == a.j.length && (a.u = !1); + a.ca = ''; + return a.s.toString(); + } + var T = H.h(); + function Ab(a) { + var b = T, + c = cb(b, a); + b = P(b, u(a, 1), c); + null == b ? (a = -1) : ((a = O(a)), (a = ab(a, b))); + switch (a) { + case 0: + return 'fixed-line'; + case 2: + return 'fixed-line-or-mobile'; + case 1: + return 'mobile'; + case 8: + return 'pager'; + case 7: + return 'personal-number'; + case 4: + return 'premium-rate'; + case 5: + return 'shared-cost'; + case 3: + return 'toll-free'; + case 9: + return 'uan'; + case 6: + return 'voip'; + default: + case -1: + return 'unknown'; + } + } + function Bb(a) { + switch (a) { + case 'fixed-line': + return 0; + case 'fixed-line-or-mobile': + return 2; + case 'mobile': + return 1; + case 'pager': + return 8; + case 'personal-number': + return 7; + case 'premium-rate': + return 4; + case 'shared-cost': + return 5; + case 'toll-free': + return 3; + case 'uan': + return 9; + case 'voip': + return 6; + default: + case 'unknown': + return -1; + } + } + function Cb(a) { + try { + switch (eb(a)) { + case 0: + return 'is-possible'; + case 1: + return 'invalid-country-code'; + case 3: + return 'too-long'; + case 2: + return 'too-short'; + } + if (db(a)) return 'is-possible'; + } catch (b) {} + return 'unknown'; + } + function Db(a) { + if ('+' !== a.charAt(0)) return { parsed: b, ea: c }; + try { + var b = $a(T, a, void 0); + } catch (e) {} + if (b) { + var c = cb(T, b); + if (null != c && 'ZZ' !== c) return { parsed: b, ea: c }; + } + for (var d = 1; 4 > d; ++d) { + c = void 0; + if (a.length < d + 1) return { parsed: b, ea: c }; + c = R(a.substring(1, d + 1)); + if ('ZZ' !== c) return { ea: c }; + } + return { parsed: b, ea: void 0 }; + } + function V(a, b) { + if (!(this instanceof V)) return new V(a, b); + if ('string' === typeof a) var c = !1; + else + try { + bb(a), (c = !0); + } catch (e) { + c = !1; + } + let d; + if (!c && 'string' !== typeof a) throw Error('Invalid phone number, expected a string'); + if (!c && null != b && 'string' !== typeof b) + throw Error('Invalid region code, expected a string'); + c || + ((a = a.trim()), + b && '+' === a.charAt(0) && (b = null), + b || ({ ea: b = null, parsed: d } = Db(a))); + this.g = { number: {}, regionCode: b, valid: !1, possible: !1 }; + if (c) this.h = a; + else { + this.h = null; + this.g.number.input = a; + if (!b) { + this.g.possibility = 'invalid-country-code'; + return; + } + if (0 === Eb(b)) { + this.g.possibility = 'invalid-country-code'; + return; + } + try { + this.h = d ? d : $a(T, a, b); + } catch (e) { + this.g.possibility = Cb(a); + return; + } + } + this.g.number.international = N(T, this.h, 1); + this.g.number.national = N(T, this.h, 2); + this.g.number.e164 = N(T, this.h, 0); + this.g.number.rfc3966 = N(T, this.h, 3); + this.g.number.significant = O(this.h); + this.g.canBeInternationallyDialled = T.ia(this.h); + this.g.possible = db(this.h); + this.g.valid = bb(this.h); + this.g.type = Ab(this.h); + this.g.possibility = Cb(this.h); + } + var W = ['PhoneNumber$$module$src$index'], + X = aa; + W[0] in X || 'undefined' == typeof X.execScript || X.execScript('var ' + W[0]); + for (var Y; W.length && (Y = W.shift()); ) + W.length || void 0 === V + ? X[Y] && X[Y] !== Object.prototype[Y] + ? (X = X[Y]) + : (X = X[Y] = {}) + : (X[Y] = V); + function Eb(a) { + return M(a) ? Xa(T, a) : 0; + } + V.getCountryCodeForRegionCode = Eb; + V.getRegionCodeForCountryCode = function (a) { + return R(a); + }; + function Fb(a) { + var b = {}; + return a.filter(c => { + if (b.hasOwnProperty(c)) return !1; + b[c] = 1; + return !0; + }); + } + V.getSupportedRegionCodes = function () { + return Fb(Oa()); + }; + V.getSupportedCallingCodes = function () { + return Fb(Qa()); + }; + V.getExample = function (a, b) { + var c; + b ? (c = Ya(a, Bb(b))) : (c = Ya(a, 0)); + return new V(c, a); + }; + V.getAsYouType = function (a) { + return new Z(a); + }; + V.prototype.toJSON = function () { + return this.g; + }; + V.prototype.toJSON = V.prototype.toJSON; + V.prototype.ia = function () { + return this.g.canBeInternationallyDialled; + }; + V.prototype.canBeInternationallyDialled = V.prototype.ia; + V.prototype.za = function () { + return this.g.valid; + }; + V.prototype.isValid = V.prototype.za; + V.prototype.ya = function () { + return this.g.possible; + }; + V.prototype.isPossible = V.prototype.ya; + V.prototype.ua = function () { + return this.g.type; + }; + V.prototype.getType = V.prototype.ua; + V.prototype.xa = function () { + return 'mobile' === this.g.type || 'fixed-line-or-mobile' === this.g.type; + }; + V.prototype.isMobile = V.prototype.xa; + V.prototype.wa = function () { + return 'fixed-line' === this.g.type || 'fixed-line-or-mobile' === this.g.type; + }; + V.prototype.isFixedLine = V.prototype.wa; + V.prototype.qa = function (a) { + return this.g.number[null == a ? 'e164' : a]; + }; + V.prototype.getNumber = V.prototype.qa; + V.prototype.ra = function (a) { + return Wa(this.h, a); + }; + V.prototype.getNumberFrom = V.prototype.ra; + V.prototype.ta = function () { + return this.g.activeRegion; + }; + V.prototype.getRegionCode = V.prototype.ta; + V.prototype.ha = function () { + return Eb(this.g.activeRegion); + }; + V.prototype.getCountryCode = V.prototype.ha; + function Z(a) { + this.l = a; + this.j = new jb(a); + this.g = this.h = ''; + } + Z.prototype.pa = function (a) { + this.h += a; + var b = this.j; + b.ka = qb(b, a); + return (this.g = b.ka); + }; + Z.prototype.addChar = Z.prototype.pa; + Z.prototype.Aa = function () { + return this.g; + }; + Z.prototype.number = Z.prototype.Aa; + Z.prototype.Ba = function () { + return '' === this.h ? this.g : this.reset(this.h.slice(0, this.h.length - 1)); + }; + Z.prototype.removeChar = Z.prototype.Ba; + Z.prototype.reset = function (a) { + var b = this.j; + b.ka = ''; + A(b.s); + A(b.aa); + A(b.v); + b.$ = 0; + b.ca = ''; + A(b.h); + b.o = ''; + A(b.g); + b.u = !0; + b.na = !1; + b.ba = !1; + b.da = !1; + b.j = []; + b.ga = !1; + b.l != b.va && (b.l = kb(b, b.la)); + this.g = this.h = ''; + if (a) { + b = 0; + for (var c = a.length; b < c; ++b) this.pa(a.charAt(b)); + } + return this.g; + }; + Z.prototype.reset = Z.prototype.reset; + Z.prototype.sa = function () { + return new V(this.g, this.l); + }; + Z.prototype.getPhoneNumber = Z.prototype.sa; + }.call( + module.exports || + (typeof globalThis !== 'undefined' && globalThis) || + (typeof commonjsGlobal !== 'undefined' && commonjsGlobal) || + (typeof window !== 'undefined' && window) || + (typeof self !== 'undefined' && self) || + commonjsGlobal, + )); +})(lib); + +(function (module) { + const exportedName = 'PhoneNumber$$module$src$index'; + + module.exports = + lib.exports[exportedName] || + ((typeof globalThis !== 'undefined' && globalThis) || + (typeof commonjsGlobal !== 'undefined' && commonjsGlobal) || + (typeof window !== 'undefined' && window) || + (typeof self !== 'undefined' && self) || + commonjsGlobal)[exportedName]; + + Object.defineProperty(module.exports, '__esModule', { + value: true, + }); + + module.exports.default = module.exports; +})(awesomePhonenumber); + +var index = /*@__PURE__*/ getDefaultExportFromCjs(awesomePhonenumber.exports); + +export { index as default }; diff --git a/packages/input-tel/lion-input-tel.js b/packages/input-tel/lion-input-tel.js new file mode 100644 index 000000000..156488776 --- /dev/null +++ b/packages/input-tel/lion-input-tel.js @@ -0,0 +1,3 @@ +import { LionInputTel } from './src/LionInputTel.js'; + +customElements.define('lion-input-tel', LionInputTel); diff --git a/packages/input-tel/package.json b/packages/input-tel/package.json new file mode 100644 index 000000000..0b782a65b --- /dev/null +++ b/packages/input-tel/package.json @@ -0,0 +1,63 @@ +{ + "name": "@lion/input-tel", + "version": "0.0.0", + "description": "Input field for entering phone numbers, including validation, formatting and mobile keyboard support.", + "license": "MIT", + "author": "ing-bank", + "homepage": "https://github.com/ing-bank/lion/", + "repository": { + "type": "git", + "url": "https://github.com/ing-bank/lion.git", + "directory": "packages/input-tel" + }, + "main": "index.js", + "module": "index.js", + "files": [ + "*.d.ts", + "*.js", + "custom-elements.json", + "docs", + "src", + "test", + "test-helpers", + "test-suites", + "translations", + "types" + ], + "scripts": { + "custom-elements-manifest": "custom-elements-manifest analyze --litelement --exclude \"docs/**/*\" \"test-helpers/**/*\"", + "debug": "cd ../../ && npm run debug -- --group input-tel", + "debug:firefox": "cd ../../ && npm run debug:firefox -- --group input-tel", + "debug:webkit": "cd ../../ && npm run debug:webkit -- --group input-tel", + "publish-docs": "node ../../packages-node/publish-docs/src/cli.js --github-url https://github.com/ing-bank/lion/ --git-root-dir ../../", + "prepublishOnly": "npm run publish-docs && npm run custom-elements-manifest", + "test": "cd ../../ && npm run test:browser -- --group input-tel" + }, + "sideEffects": [ + "lion-input-tel.js" + ], + "dependencies": { + "@lion/core": "0.21.1", + "@lion/form-core": "0.16.0", + "@lion/input": "0.16.0", + "@lion/localize": "0.23.0" + }, + "keywords": [ + "input", + "input-tel", + "lion", + "web-components" + ], + "publishConfig": { + "access": "public" + }, + "customElements": "custom-elements.json", + "customElementsManifest": "custom-elements.json", + "exports": { + ".": "./index.js", + "./define": "./define.js", + "./test-suites": "./test-suites/index.js", + "./test-helpers": "./test-helpers/index.js", + "./docs/*": "./docs/*" + } +} diff --git a/packages/input-tel/src/LionInputTel.js b/packages/input-tel/src/LionInputTel.js new file mode 100644 index 000000000..284aa3650 --- /dev/null +++ b/packages/input-tel/src/LionInputTel.js @@ -0,0 +1,317 @@ +import { Unparseable } from '@lion/form-core'; +import { LocalizeMixin, localize } from '@lion/localize'; +import { LionInput } from '@lion/input'; +import { PhoneUtilManager } from './PhoneUtilManager.js'; +import { liveFormatPhoneNumber } from './preprocessors.js'; +import { formatPhoneNumber } from './formatters.js'; +import { parsePhoneNumber } from './parsers.js'; +import { IsPhoneNumber } from './validators.js'; + +/** + * @typedef {import('../types').FormatStrategy} FormatStrategy + * @typedef {import('../types').RegionCode} RegionCode + * @typedef {import('../types').PhoneNumberType} PhoneNumberType + * @typedef {import('@lion/form-core/types/FormatMixinTypes').FormatOptions} FormatOptions + * @typedef {* & import('@lion/input-tel/lib/awesome-phonenumber-esm').default} PhoneNumber + * @typedef {FormatOptions & {regionCode: RegionCode; formatStrategy: FormatStrategy}} FormatOptionsTel + */ + +export class LionInputTel extends LocalizeMixin(LionInput) { + /** + * @configure LitElement + */ + static properties = { + allowedRegions: { type: Array }, + formatStrategy: { type: String, attribute: 'format-strategy' }, + activeRegion: { type: String }, + _phoneUtil: { type: Object, state: true }, + _needsLightDomRender: { type: Number, state: true }, + _derivedRegionCode: { type: String, state: true }, + }; + + /** + * Currently active region based on: + * 1. allowed regions: get the region from configured allowed regions (if one entry) + * 2. user input: try to derive active region from user input + * 3. locale: try to get the region from locale (`html[lang]` attribute) + * @readonly + * @property {RegionCode|undefined}activeRegion + */ + get activeRegion() { + return this.__activeRegion; + } + + // @ts-ignore read only + // eslint-disable-next-line class-methods-use-this, no-empty-function + set activeRegion(v) {} + + /** + * Type of phone number, derived from textbox value. Enum with values: + * -'fixed-line' + * -'fixed-line-or-mobile' + * -'mobile' + * -'pager' + * -'personal-number' + * -'premium-rate' + * -'shared-cost' + * -'toll-free' + * -'uan' + * -'voip' + * -'unknown' + * See https://www.npmjs.com/package/awesome-phonenumber + * @readonly + * @property {PhoneNumberType|undefined} activePhoneNumberType + */ + get activePhoneNumberType() { + let pn; + try { + pn = this._phoneUtil && this._phoneUtil(this.modelValue, this.activeRegion); + // eslint-disable-next-line no-empty + } catch (_) {} + return pn?.g?.type || 'unknown'; + } + + // @ts-ignore read only + // eslint-disable-next-line class-methods-use-this, no-empty-function + set activePhoneNumberType(v) {} + + /** + * Protected setter for activeRegion, only meant for subclassers + * @protected + * @param {RegionCode|undefined} newValue + */ + _setActiveRegion(newValue) { + const oldValue = this.activeRegion; + this.__activeRegion = newValue; + this.requestUpdate('activeRegion', oldValue); + } + + /** + * Used for rendering the region/country list + * @property _allowedOrAllRegions + * @type {RegionCode[]} + */ + get _allowedOrAllRegions() { + return ( + (this.allowedRegions?.length + ? this.allowedRegions + : this._phoneUtil?.getSupportedRegionCodes()) || [] + ); + } + + /** + * @property _phoneUtilLoadComplete + * @protected + * @type {Promise} + */ + // eslint-disable-next-line class-methods-use-this + get _phoneUtilLoadComplete() { + return PhoneUtilManager.loadComplete; + } + + /** + * @lifecycle platform + */ + constructor() { + super(); + + /** + * Determines what the formatter output should look like. + * Formatting strategies as provided by google-libphonenumber + * See: https://www.npmjs.com/package/google-libphonenumber + * @type {FormatStrategy} + */ + this.formatStrategy = 'international'; + + /** + * The regions that should be considered when international phone numbers are detected. + * (when not configured, all regions worldwide will be considered) + * @type {RegionCode[]} + */ + this.allowedRegions = []; + + /** @private */ + this.__isPhoneNumberValidatorInstance = new IsPhoneNumber(); + /** @configures ValidateMixin */ + this.defaultValidators.push(this.__isPhoneNumberValidatorInstance); + + // Expose awesome-phonenumber lib for Subclassers + /** + * @protected + * @type {PhoneNumber|null} + */ + this._phoneUtil = PhoneUtilManager.isLoaded + ? /** @type {PhoneNumber} */ (PhoneUtilManager.PhoneNumber) + : null; + + /** + * Helper that triggers a light dom render aligned with update loop. + * TODO: combine with render fn of SlotMixin + * @protected + * @type {number} + */ + this._needsLightDomRender = 0; + + if (!PhoneUtilManager.isLoaded) { + PhoneUtilManager.loadComplete.then(() => { + this._onPhoneNumberUtilReady(); + }); + } + } + + /** + * @param {import('lit-element').PropertyValues } changedProperties + */ + firstUpdated(changedProperties) { + super.firstUpdated(changedProperties); + + // This will trigger the right keyboard on mobile + this._inputNode.inputMode = 'tel'; + } + + /** + * @param {import('lit-element').PropertyValues } changedProperties + */ + updated(changedProperties) { + super.updated(changedProperties); + + if (changedProperties.has('activeRegion')) { + // Make sure new modelValue is computed, but prevent formattedValue from being set when focused + this.__isUpdatingRegionWhileFocused = this.focused; + this._calculateValues({ source: null }); + this.__isUpdatingRegionWhileFocused = false; + + this.__isPhoneNumberValidatorInstance.param = this.activeRegion; + /** @type {FormatOptionsTel} */ + (this.formatOptions).regionCode = /** @type {RegionCode} */ (this.activeRegion); + } + + if (changedProperties.has('formatStrategy')) { + this._calculateValues({ source: null }); + /** @type {FormatOptionsTel} */ + (this.formatOptions).formatStrategy = this.formatStrategy; + } + + if (changedProperties.has('modelValue') || changedProperties.has('allowedRegions')) { + this.__calculateActiveRegion(); + } + } + + /** + * @configure LocalizeMixin + */ + onLocaleUpdated() { + super.onLocaleUpdated(); + + const localeSplitted = localize.locale.split('-'); + /** + * @protected + * @type {RegionCode} + */ + this._langIso = /** @type {RegionCode} */ ( + localeSplitted[localeSplitted.length - 1].toUpperCase() + ); + this.__calculateActiveRegion(); + } + + /** + * @configure FormatMixin + * @param {string} modelValue + * @returns {string} + */ + formatter(modelValue) { + return formatPhoneNumber(modelValue, { + regionCode: /** @type {RegionCode} */ (this.activeRegion), + formatStrategy: this.formatStrategy, + }); + } + + /** + * @configure FormatMixin + * @param {string} viewValue a phone number without (or with) country code, like '06 12345678' + * @returns {string} a trimmed phone number with country code, like '+31612345678' + */ + parser(viewValue) { + return parsePhoneNumber(viewValue, { + regionCode: /** @type {RegionCode} */ (this.activeRegion), + }); + } + + /** + * @configure FormatMixin + * @param {string} viewValue + * @param {object} options + * @param {string} options.prevViewValue + * @param {number} options.currentCaretIndex + * @returns {{ viewValue: string; caretIndex: number; } | undefined } + */ + preprocessor(viewValue, { currentCaretIndex, prevViewValue }) { + return liveFormatPhoneNumber(viewValue, { + regionCode: /** @type {RegionCode} */ (this.activeRegion), + formatStrategy: this.formatStrategy, + currentCaretIndex, + prevViewValue, + }); + } + + /** + * Do not reflect back .formattedValue during typing (this normally wouldn't happen when + * FormatMixin calls _calculateValues based on user input, but for LionInputTel we need to + * call it on .activeRegion change) + * @enhance FormatMixin + * @returns {boolean} + */ + _reflectBackOn() { + return !this.__isUpdatingRegionWhileFocused && super._reflectBackOn(); + } + + /** + * @protected + */ + _onPhoneNumberUtilReady() { + // This should trigger a rerender in shadow dom + this._phoneUtil = /** @type {PhoneNumber} */ (PhoneUtilManager.PhoneNumber); + // This should trigger a rerender in light dom + this._scheduleLightDomRender(); + // Format when libPhoneNumber is loaded + this._calculateValues({ source: null }); + this.__calculateActiveRegion(); + } + + /** + * This allows to hook into the update hook + * @protected + */ + _scheduleLightDomRender() { + this._needsLightDomRender += 1; + } + + /** + * @private + */ + __calculateActiveRegion() { + // 1. Get the region from preconfigured allowed region (if one entry) + if (this.allowedRegions?.length === 1) { + this._setActiveRegion(this.allowedRegions[0]); + return; + } + + // 2. Try to derive action region from user value + const value = !(this.modelValue instanceof Unparseable) ? this.modelValue : this.value; + const regionDerivedFromValue = value && this._phoneUtil && this._phoneUtil(value).g?.regionCode; + + if (regionDerivedFromValue && this._allowedOrAllRegions.includes(regionDerivedFromValue)) { + this._setActiveRegion(regionDerivedFromValue); + return; + } + + // 3. Try to get the region from locale + if (this._langIso && this._allowedOrAllRegions.includes(this._langIso)) { + this._setActiveRegion(this._langIso); + return; + } + + // 4. Not derivable + this._setActiveRegion(undefined); + } +} diff --git a/packages/input-tel/src/PhoneUtilManager.js b/packages/input-tel/src/PhoneUtilManager.js new file mode 100644 index 000000000..e484e9342 --- /dev/null +++ b/packages/input-tel/src/PhoneUtilManager.js @@ -0,0 +1,38 @@ +/** @type {(value: any) => void} */ +let resolveLoaded; + +/** + * - Handles lazy loading of the (relatively large) google-libphonenumber library, allowing + * for quick first paints + * - Maintains one instance of phoneNumberUtil that can be shared across multiple places + * - Allows for easy mocking in unit tests + */ +export class PhoneUtilManager { + static async loadLibPhoneNumber() { + const PhoneNumber = (await import('../lib/awesome-phonenumber-esm.js')).default; + this.PhoneNumber = PhoneNumber; + resolveLoaded(undefined); + return PhoneNumber; + } + + /** + * Check if google-libphonenumber has been loaded + */ + static get isLoaded() { + return Boolean(this.PhoneNumber); + } +} + +/** + * Wait till google-libphonenumber has been loaded + * @example + * ```js + * await PhoneUtilManager.loadComplete; + * ``` + */ +PhoneUtilManager.loadComplete = new Promise(resolve => { + resolveLoaded = resolve; +}); + +// initialize +PhoneUtilManager.loadLibPhoneNumber(); diff --git a/packages/input-tel/src/formatters.js b/packages/input-tel/src/formatters.js new file mode 100644 index 000000000..73ef4cfbe --- /dev/null +++ b/packages/input-tel/src/formatters.js @@ -0,0 +1,57 @@ +import { PhoneUtilManager } from './PhoneUtilManager.js'; + +/** + * @typedef {import('../types').FormatStrategy} FormatStrategy + * @typedef {import('../types').RegionCode} RegionCode + * @typedef {* & import('@lion/input-tel/lib/awesome-phonenumber-esm').default} PhoneNumber + */ + +/** + * @param {string} modelValue + * @param {object} options + * @param {RegionCode} options.regionCode + * @param {FormatStrategy} [options.formatStrategy='international'] + * @returns {string} + */ +export function formatPhoneNumber(modelValue, { regionCode, formatStrategy = 'international' }) { + // Do not format when not loaded + if (!PhoneUtilManager.isLoaded) { + return modelValue; + } + + // eslint-disable-next-line prefer-destructuring + const PhoneNumber = /** @type {PhoneNumber} */ (PhoneUtilManager.PhoneNumber); + + let pn; + try { + pn = new PhoneNumber(modelValue, regionCode); // phoneNumberUtil.parse(modelValue, regionCode); + // eslint-disable-next-line no-empty + } catch (_) {} + + if (modelValue?.length >= 4 && modelValue?.length <= 16 && pn?.isValid()) { + let formattedValue; + + switch (formatStrategy) { + case 'e164': + formattedValue = pn.getNumber('e164'); // -> '+46707123456' (default) + break; + case 'international': + formattedValue = pn.getNumber('international'); // -> '+46 70 712 34 56' + break; + case 'national': + formattedValue = pn.getNumber('national'); // -> '070-712 34 56' + break; + case 'rfc3966': + formattedValue = pn.getNumber('rfc3966'); // -> 'tel:+46-70-712-34-56' + break; + case 'significant': + formattedValue = pn.getNumber('significant'); // -> '707123456' + break; + default: + break; + } + return formattedValue; + } + + return modelValue; +} diff --git a/packages/input-tel/src/parsers.js b/packages/input-tel/src/parsers.js new file mode 100644 index 000000000..bd5256bf8 --- /dev/null +++ b/packages/input-tel/src/parsers.js @@ -0,0 +1,33 @@ +import { PhoneUtilManager } from './PhoneUtilManager.js'; + +/** + * @typedef {import('../types').RegionCode} RegionCode + * @typedef {* & import('awesome-phonenumber').default} PhoneNumber + */ + +/** + * @param {string} viewValue + * @param {{regionCode:RegionCode;}} options + * @returns {string} + */ +export function parsePhoneNumber(viewValue, { regionCode }) { + // Do not format when not loaded + if (!PhoneUtilManager.isLoaded) { + return viewValue; + } + + // eslint-disable-next-line prefer-destructuring + const PhoneNumber = /** @type {PhoneNumber} */ (PhoneUtilManager.PhoneNumber); + + let pn; + try { + pn = PhoneNumber(viewValue, regionCode); + // eslint-disable-next-line no-empty + } catch (_) {} + + if (pn) { + return pn.getNumber('e164'); + } + + return viewValue; +} diff --git a/packages/input-tel/src/preprocessors.js b/packages/input-tel/src/preprocessors.js new file mode 100644 index 000000000..c6b89d248 --- /dev/null +++ b/packages/input-tel/src/preprocessors.js @@ -0,0 +1,51 @@ +import { PhoneUtilManager } from './PhoneUtilManager.js'; +import { formatPhoneNumber } from './formatters.js'; + +/** + * @typedef {import('../types').FormatStrategy} FormatStrategy + * @typedef {import('../types').RegionCode} RegionCode + * @typedef {* & import('@lion/input-tel/lib/awesome-phonenumber-esm').default} PhoneNumber + */ + +/** + * @param {string} viewValue + * @param {object} options + * @param {RegionCode} options.regionCode + * @param {string} options.prevViewValue + * @param {number} options.currentCaretIndex + * @param {FormatStrategy} options.formatStrategy + * @returns {{viewValue:string; caretIndex:number;}|undefined} + */ +export function liveFormatPhoneNumber( + viewValue, + { regionCode, formatStrategy, prevViewValue, currentCaretIndex }, +) { + const diff = viewValue.length - prevViewValue.length; + // Do not format when not loaded + if (diff <= 0 || !PhoneUtilManager.isLoaded) { + return undefined; + } + + // eslint-disable-next-line prefer-destructuring + const PhoneNumber = /** @type {PhoneNumber} */ (PhoneUtilManager.PhoneNumber); + const ayt = PhoneNumber.getAsYouType(regionCode); + + for (const char of viewValue) { + if (char !== '') { + ayt.addChar(char); + } + } + + const newViewValue = formatPhoneNumber(ayt.number(), { regionCode, formatStrategy }); + + /** + * Given following situation: + * - viewValue: `+316123` + * - currentCaretIndex: 2 (inbetween 3 and 1) + * - prevViewValue `+36123` (we inserted '1' at position 2) + * => we should get `+31 6123`, and new caretIndex should be 3, and not newViewValue.length + */ + const diffBetweenNewAndCurrent = newViewValue.length - viewValue.length; + const newCaretIndex = currentCaretIndex + diffBetweenNewAndCurrent; + return newViewValue ? { viewValue: newViewValue, caretIndex: newCaretIndex } : undefined; +} diff --git a/packages/input-tel/src/validators.js b/packages/input-tel/src/validators.js new file mode 100644 index 000000000..d842e2459 --- /dev/null +++ b/packages/input-tel/src/validators.js @@ -0,0 +1,70 @@ +import { Validator } from '@lion/form-core'; +import { PhoneUtilManager } from './PhoneUtilManager.js'; + +/** + * @typedef {import('../types').RegionCode} RegionCode + * @typedef {* & import('@lion/input-tel/lib/awesome-phonenumber-esm').default} PhoneNumber + */ + +/** + * @param {string} modelValue + * @param {RegionCode} regionCode + * @returns {false|'invalid-country-code'|'unknown'|'too-long'|'too-short'} + */ +function hasFeedback(modelValue, regionCode) { + // eslint-disable-next-line prefer-destructuring + const PhoneNumber = /** @type {PhoneNumber} */ (PhoneUtilManager.PhoneNumber); + let invalidCountryCode = false; + + if (regionCode && modelValue?.length >= 4 && modelValue?.length <= 16) { + let pn; + try { + pn = PhoneNumber(modelValue, regionCode); + invalidCountryCode = pn.g.regionCode !== regionCode; + if (invalidCountryCode) { + return 'invalid-country-code'; + } + // eslint-disable-next-line no-empty + } catch (_) {} + // too-short/too-long info seems to be not there (we get 'is-possible'?) + const enumValue = !pn.isValid() ? pn.g.possibility : false; + if (enumValue === 'is-possible') { + return 'unknown'; + } + return enumValue; + } + + return 'unknown'; +} + +export class IsPhoneNumber extends Validator { + static validatorName = 'IsPhoneNumber'; + + static get async() { + // Will be run as async the first time if PhoneUtilManager hasn't loaded yet, sync afterwards + return !PhoneUtilManager.isLoaded; + } + + /** + * @param {string} modelValue telephone number without country prefix + * @param {RegionCode} regionCode + */ + // eslint-disable-next-line class-methods-use-this + execute(modelValue, regionCode) { + if (!PhoneUtilManager.isLoaded) { + // Return a Promise once not loaded yet. Since async Validators are meant for things like + // loading server side data (in this case a lib), we continue as a sync Validator once loaded + return new Promise(resolve => { + PhoneUtilManager.loadComplete.then(() => { + resolve(hasFeedback(modelValue, regionCode)); + }); + }); + } + return hasFeedback(modelValue, regionCode); + } + + // TODO: add a file for loadDefaultMessages + static async getMessage() { + return 'Not a valid phone number'; + } +} diff --git a/packages/input-tel/test-helpers/index.js b/packages/input-tel/test-helpers/index.js new file mode 100644 index 000000000..d599fada8 --- /dev/null +++ b/packages/input-tel/test-helpers/index.js @@ -0,0 +1 @@ +export { mockPhoneUtilManager, restorePhoneUtilManager } from './mockPhoneUtilManager.js'; diff --git a/packages/input-tel/test-helpers/mockPhoneUtilManager.js b/packages/input-tel/test-helpers/mockPhoneUtilManager.js new file mode 100644 index 000000000..1c84414dc --- /dev/null +++ b/packages/input-tel/test-helpers/mockPhoneUtilManager.js @@ -0,0 +1,25 @@ +import { PhoneUtilManager } from '../src/PhoneUtilManager.js'; + +const originalLoadComplete = PhoneUtilManager.loadComplete; +const originalIsLoaded = PhoneUtilManager.isLoaded; + +export function mockPhoneUtilManager() { + /** @type {(value: any) => void} */ + let resolveLoaded; + let isLoaded = false; + PhoneUtilManager.loadComplete = new Promise(resolve => { + resolveLoaded = () => { + isLoaded = true; + resolve(undefined); + }; + }); + Object.defineProperty(PhoneUtilManager, 'isLoaded', { get: () => isLoaded }); + + // @ts-ignore + return { resolveLoaded }; +} + +export function restorePhoneUtilManager() { + PhoneUtilManager.loadComplete = originalLoadComplete; + Object.defineProperty(PhoneUtilManager, 'isLoaded', { get: () => originalIsLoaded }); +} diff --git a/packages/input-tel/test-suites/LionInputTel.suite.js b/packages/input-tel/test-suites/LionInputTel.suite.js new file mode 100644 index 000000000..090684c0e --- /dev/null +++ b/packages/input-tel/test-suites/LionInputTel.suite.js @@ -0,0 +1,384 @@ +import { + expect, + fixture as _fixture, + fixtureSync as _fixtureSync, + html, + defineCE, + unsafeStatic, + aTimeout, +} from '@open-wc/testing'; +import sinon from 'sinon'; +import { mimicUserInput } from '@lion/form-core/test-helpers'; +import { localize } from '@lion/localize'; +import { LionInputTel } from '../src/LionInputTel.js'; +import { IsPhoneNumber } from '../src/validators.js'; +import { PhoneUtilManager } from '../src/PhoneUtilManager.js'; +import { + mockPhoneUtilManager, + restorePhoneUtilManager, +} from '../test-helpers/mockPhoneUtilManager.js'; + +/** + * @typedef {import('@lion/core').TemplateResult} TemplateResult + * @typedef {import('../types').RegionCode} RegionCode + */ + +const fixture = /** @type {(arg: string | TemplateResult) => Promise} */ (_fixture); +const fixtureSync = /** @type {(arg: string | TemplateResult) => LionInputTel} */ (_fixtureSync); + +// const isPhoneNumberUtilLoadComplete = el => el._phoneUtilLoadComplete; + +const getRegionCodeBasedOnLocale = () => { + const localeSplitted = localize.locale.split('-'); + return /** @type {RegionCode} */ (localeSplitted[localeSplitted.length - 1]).toUpperCase(); +}; + +/** + * @param {{ klass:LionInputTel }} config + */ +// @ts-ignore +export function runInputTelSuite({ klass = LionInputTel } = {}) { + // @ts-ignore + const tagName = defineCE(/** @type {* & HTMLElement} */ (class extends klass {})); + const tag = unsafeStatic(tagName); + + describe('LionInputTel', () => { + beforeEach(async () => { + // Wait till PhoneUtilManager has been loaded + await PhoneUtilManager.loadComplete; + }); + + describe('Region codes', () => { + describe('Readonly accessor `.activeRegion`', () => { + // 1. **allowed regions**: try to get the region from preconfigured allowed region (first entry) + it('takes .allowedRegions[0] when only one allowed region configured', async () => { + const el = await fixture( + html` <${tag} .allowedRegions="${['DE']}" .modelValue="${'+31612345678'}" > `, + ); + await el.updateComplete; + expect(el.activeRegion).to.equal('DE'); + }); + + it('returns undefined when multiple .allowedRegions, but no modelValue match', async () => { + // involve locale, so we are sure it does not fall back on locale + const currentCode = getRegionCodeBasedOnLocale(); + const allowedRegions = ['BE', 'DE', 'CN']; + const el = await fixture( + html` <${tag} .modelValue="${'+31612345678'}" .allowedRegions="${allowedRegions.filter( + ar => ar !== currentCode, + )}"> `, + ); + expect(el.activeRegion).to.equal(undefined); + }); + + // 2. **user input**: try to derive active region from user input + it('deducts it from modelValue when provided', async () => { + const el = await fixture(html` <${tag} .modelValue="${'+31612345678'}"> `); + // Region code for country code '31' is 'NL' + expect(el.activeRegion).to.equal('NL'); + }); + + it('.modelValue takes precedence over .allowedRegions when both preconfigured and .modelValue updated', async () => { + const el = await fixture( + html` <${tag} .allowedRegions="${[ + 'DE', + 'BE', + 'NL', + ]}" .modelValue="${'+31612345678'}" > `, + ); + expect(el.activeRegion).to.equal('NL'); + }); + + // 3. **locale**: try to get the region from locale (`html[lang]` attribute) + it('automatically bases it on current locale when nothing preconfigured', async () => { + const el = await fixture(html` <${tag}> `); + const currentCode = getRegionCodeBasedOnLocale(); + expect(el.activeRegion).to.equal(currentCode); + }); + + it('returns undefined when locale not within allowed regions', async () => { + const currentCode = getRegionCodeBasedOnLocale(); + const allowedRegions = ['NL', 'BE', 'DE']; + const el = await fixture( + html` <${tag} .allowedRegions="${allowedRegions.filter( + ar => ar !== currentCode, + )}"> `, + ); + expect(el.activeRegion).to.equal(undefined); + }); + }); + + it('can preconfigure the region code via prop', async () => { + const currentCode = getRegionCodeBasedOnLocale(); + const newCode = currentCode === 'DE' ? 'NL' : 'DE'; + const el = await fixture(html` <${tag} .allowedRegions="${[newCode]}"> `); + expect(el.activeRegion).to.equal(newCode); + }); + + it.skip('reformats when region code is changed on the fly', async () => { + const el = await fixture( + html` <${tag} .allowedRegions="${['NL']}" .modelValue="${'+31612345678'}"> `, + ); + await el.updateComplete; + expect(el.formattedValue).to.equal('+31 6 12345678'); + el.allowedRegions = ['NL']; + await el.updateComplete; + expect(el.formattedValue).to.equal('612345678'); + }); + }); + + describe('Readonly accessor `.activePhoneNumberType`', () => { + const types = [ + { type: 'fixed-line', number: '030 1234567', allowedRegions: ['NL'] }, + { type: 'mobile', number: '06 12345678', allowedRegions: ['NL'] }, + // { type: 'fixed-line-or-mobile', number: '030 1234567' }, + // { type: 'pager', number: '06 12345678' }, + // { type: 'personal-number', number: '06 12345678' }, + // { type: 'premium-rate', number: '06 12345678' }, + // { type: 'shared-cost', : '06 12345678' }, + // { type: 'toll-free', number: '06 12345678' }, + // { type: 'uan', number: '06 12345678' }, + // { type: 'voip', number: '06 12345678' }, + // { type: 'unknown', number: '06 12345678' }, + ]; + + for (const { type, number, allowedRegions } of types) { + it(`returns "${type}" for ${type} numbers`, async () => { + const el = await fixture(html` <${tag} .allowedRegions="${allowedRegions}"> `); + mimicUserInput(el, number); + await aTimeout(0); + expect(el.activePhoneNumberType).to.equal(type); + }); + } + }); + + describe('User interaction', () => { + it('sets inputmode to "tel" for mobile keyboard', async () => { + const el = await fixture(html` <${tag}> `); + // @ts-expect-error [allow-protected] inside tests + expect(el._inputNode.inputMode).to.equal('tel'); + }); + + it('formats according to locale', async () => { + const el = await fixture( + html` <${tag} .modelValue="${'+31612345678'}" .allowedRegions="${['NL']}"> `, + ); + await aTimeout(0); + expect(el.formattedValue).to.equal('+31 6 12345678'); + }); + + it('does not reflect back formattedValue after activeRegion change when input still focused', async () => { + const el = await fixture(html` <${tag} .modelValue="${'+639608920056'}"> `); + expect(el.activeRegion).to.equal('PH'); + el.focus(); + mimicUserInput(el, '+31612345678'); + await el.updateComplete; + await el.updateComplete; + expect(el.activeRegion).to.equal('NL'); + expect(el.formattedValue).to.equal('+31 6 12345678'); + expect(el.value).to.equal('+31612345678'); + }); + }); + + // https://www.npmjs.com/package/google-libphonenumber + // https://en.wikipedia.org/wiki/E.164 + describe('Values', () => { + it('stores a modelValue in E164 format', async () => { + const el = await fixture(html` <${tag} .allowedRegions="${['NL']}"> `); + mimicUserInput(el, '612345678'); + await aTimeout(0); + expect(el.modelValue).to.equal('+31612345678'); + }); + + it('stores a serializedValue in E164 format', async () => { + const el = await fixture(html` <${tag} .allowedRegions="${['NL']}"> `); + mimicUserInput(el, '612345678'); + await aTimeout(0); + expect(el.serializedValue).to.equal('+31612345678'); + }); + + it('stores a formattedValue according to format strategy', async () => { + const el = await fixture( + html` <${tag} format-strategy="national" .allowedRegions="${['NL']}"> `, + ); + mimicUserInput(el, '612345678'); + await aTimeout(0); + expect(el.formattedValue).to.equal('06 12345678'); + }); + + describe('Format strategies', () => { + it('supports "national" strategy', async () => { + const el = await fixture( + html` <${tag} format-strategy="national" .allowedRegions="${['NL']}"> `, + ); + mimicUserInput(el, '612345678'); + await aTimeout(0); + expect(el.formattedValue).to.equal('06 12345678'); + }); + + it('supports "international" strategy', async () => { + const el = await fixture( + html` <${tag} format-strategy="international" .allowedRegions="${['NL']}"> `, + ); + mimicUserInput(el, '612345678'); + await aTimeout(0); + expect(el.formattedValue).to.equal('+31 6 12345678'); + }); + + it('supports "e164" strategy', async () => { + const el = await fixture( + html` <${tag} format-strategy="e164" .allowedRegions="${['NL']}"> `, + ); + mimicUserInput(el, '612345678'); + await aTimeout(0); + expect(el.formattedValue).to.equal('+31612345678'); + }); + + it('supports "rfc3966" strategy', async () => { + const el = await fixture( + html` <${tag} format-strategy="rfc3966" .allowedRegions="${['NL']}"> `, + ); + mimicUserInput(el, '612345678'); + await aTimeout(0); + expect(el.formattedValue).to.equal('tel:+31-6-12345678'); + }); + + it('supports "significant" strategy', async () => { + const el = await fixture( + html` <${tag} format-strategy="significant" .allowedRegions="${['NL']}"> `, + ); + mimicUserInput(el, '612345678'); + await aTimeout(0); + expect(el.formattedValue).to.equal('612345678'); + }); + }); + + // TODO: this should be allowed for in FormatMixin => + // in _onModelValueChanged we can add a hook '_checkModelValueFormat'. This needs to be + // called whenever .modelValue is supplied by devleloper (not when being internal result + // of parser call). + // Alternatively, we could be forgiving by attempting to treat it as a view value and + // correct the format (although strictness will be preferred...) + it.skip('does not allow modelValues in non E164 format', async () => { + const el = await fixture( + html` <${tag} .modelValue="${'612345678'}" .allowedRegions="${['NL']}"> `, + ); + expect(el.modelValue).to.equal(undefined); + }); + }); + + describe('Validation', () => { + it('applies IsPhoneNumber as default validator', async () => { + const el = await fixture(html` <${tag}> `); + expect(el.defaultValidators.find(v => v instanceof IsPhoneNumber)).to.be.not.undefined; + }); + + it('configures IsPhoneNumber with regionCode before first validation', async () => { + const el = fixtureSync( + html` <${tag} .allowedRegions="${['NL']}" .modelValue="${'612345678'}"> `, + ); + const spy = sinon.spy(el, 'validate'); + const validatorInstance = /** @type {IsPhoneNumber} */ ( + el.defaultValidators.find(v => v instanceof IsPhoneNumber) + ); + await el.updateComplete; + expect(validatorInstance.param).to.equal('NL'); + expect(spy).to.have.been.called; + spy.restore(); + }); + + it('updates IsPhoneNumber param on regionCode change', async () => { + const el = await fixture( + html` <${tag} .allowedRegions="${['NL']}" .modelValue="${'612345678'}"> `, + ); + const validatorInstance = /** @type {IsPhoneNumber} */ ( + el.defaultValidators.find(v => v instanceof IsPhoneNumber) + ); + // @ts-expect-error allow protected in tests + el._setActiveRegion('DE'); + await el.updateComplete; + expect(validatorInstance.param).to.equal('DE'); + }); + }); + + describe('User interaction', () => { + it('sets inputmode to "tel" for mobile keyboard', async () => { + const el = await fixture(html` <${tag}> `); + // @ts-expect-error [allow-protected] inside tests + expect(el._inputNode.inputMode).to.equal('tel'); + }); + + it('formats according to locale', async () => { + const el = await fixture(html` <${tag} .allowedRegions="${['NL']}"> `); + await PhoneUtilManager.loadComplete; + await el.updateComplete; + el.modelValue = '612345678'; + expect(el.formattedValue).to.equal('+31 6 12345678'); + }); + }); + + describe('Live format', () => { + it('calls .preprocessor on keyup', async () => { + const el = await fixture(html` <${tag} .allowedRegions="${['NL']}"> `); + mimicUserInput(el, '+316'); + await aTimeout(0); + expect(el.value).to.equal('+31 6'); + }); + }); + + describe('Accessibility', () => { + describe('Audit', () => { + it('passes a11y audit', async () => { + const el = await fixture(html`<${tag} label="tel" .modelValue=${'0123456789'}>`); + await expect(el).to.be.accessible(); + }); + + it('passes a11y audit when readonly', async () => { + const el = await fixture( + html`<${tag} label="tel" readonly .modelValue=${'0123456789'}>`, + ); + await expect(el).to.be.accessible(); + }); + + it('passes a11y audit when disabled', async () => { + const el = await fixture( + html`<${tag} label="tel" disabled .modelValue=${'0123456789'}>`, + ); + await expect(el).to.be.accessible(); + }); + }); + }); + + describe('Lazy loading awesome-phonenumber', () => { + /** @type {(value:any) => void} */ + let resolveLoaded; + beforeEach(() => { + ({ resolveLoaded } = mockPhoneUtilManager()); + }); + + afterEach(() => { + restorePhoneUtilManager(); + }); + + it('reformats once lib has been loaded', async () => { + const el = await fixture( + html` <${tag} .modelValue="${'612345678'}" .allowedRegions="${['NL']}"> `, + ); + expect(el.formattedValue).to.equal('612345678'); + resolveLoaded(undefined); + await aTimeout(0); + expect(el.formattedValue).to.equal('+31 6 12345678'); + }); + + it('validates once lib has been loaded', async () => { + const el = await fixture( + html` <${tag} .modelValue="${'+31612345678'}" .allowedRegions="${['DE']}"> `, + ); + expect(el.hasFeedbackFor).to.eql([]); + resolveLoaded(undefined); + await aTimeout(0); + expect(el.hasFeedbackFor).to.eql(['error']); + }); + }); + }); +} diff --git a/packages/input-tel/test-suites/index.js b/packages/input-tel/test-suites/index.js new file mode 100644 index 000000000..a1794c882 --- /dev/null +++ b/packages/input-tel/test-suites/index.js @@ -0,0 +1 @@ +export { runInputTelSuite } from './LionInputTel.suite.js'; diff --git a/packages/input-tel/test/LionInputTel.test.js b/packages/input-tel/test/LionInputTel.test.js new file mode 100644 index 000000000..9c97a7c5d --- /dev/null +++ b/packages/input-tel/test/LionInputTel.test.js @@ -0,0 +1,3 @@ +import { runInputTelSuite } from '../test-suites/LionInputTel.suite.js'; + +runInputTelSuite(); diff --git a/packages/input-tel/test/formatters.test.js b/packages/input-tel/test/formatters.test.js new file mode 100644 index 000000000..b53fe02a5 --- /dev/null +++ b/packages/input-tel/test/formatters.test.js @@ -0,0 +1,28 @@ +import { expect } from '@open-wc/testing'; +import { formatPhoneNumber } from '../src/formatters.js'; +import { PhoneUtilManager } from '../src/PhoneUtilManager.js'; + +describe('formatPhoneNumber', () => { + beforeEach(async () => { + // Wait till PhoneUtilManager has been loaded + await PhoneUtilManager.loadComplete; + }); + + it('formats a phone number according to provided formatStrategy', () => { + expect(formatPhoneNumber('0707123456', { regionCode: 'SE', formatStrategy: 'e164' })).to.equal( + '+46707123456', + ); + expect( + formatPhoneNumber('+46707123456', { regionCode: 'SE', formatStrategy: 'international' }), + ).to.equal('+46 70 712 34 56'); + expect( + formatPhoneNumber('+46707123456', { regionCode: 'SE', formatStrategy: 'national' }), + ).to.equal('070-712 34 56'); + expect( + formatPhoneNumber('+46707123456', { regionCode: 'SE', formatStrategy: 'rfc3966' }), + ).to.equal('tel:+46-70-712-34-56'); + expect( + formatPhoneNumber('+46707123456', { regionCode: 'SE', formatStrategy: 'significant' }), + ).to.equal('707123456'); + }); +}); diff --git a/packages/input-tel/test/parsers.test.js b/packages/input-tel/test/parsers.test.js new file mode 100644 index 000000000..9f1852d02 --- /dev/null +++ b/packages/input-tel/test/parsers.test.js @@ -0,0 +1,16 @@ +import { expect } from '@open-wc/testing'; +import { parsePhoneNumber } from '../src/parsers.js'; +import { PhoneUtilManager } from '../src/PhoneUtilManager.js'; + +describe('parsePhoneNumber', () => { + beforeEach(async () => { + // Wait till PhoneUtilManager has been loaded + await PhoneUtilManager.loadComplete; + }); + + it('parses a a view value to e164 standard', () => { + expect(parsePhoneNumber('0707123456', { regionCode: 'SE' })).to.equal('+46707123456'); + expect(parsePhoneNumber('0707123456', { regionCode: 'NL' })).to.equal('+31707123456'); + expect(parsePhoneNumber('0707123456', { regionCode: 'DE' })).to.equal('+49707123456'); + }); +}); diff --git a/packages/input-tel/test/preprocessors.test.js b/packages/input-tel/test/preprocessors.test.js new file mode 100644 index 000000000..749d56212 --- /dev/null +++ b/packages/input-tel/test/preprocessors.test.js @@ -0,0 +1,32 @@ +import { expect } from '@open-wc/testing'; +import { liveFormatPhoneNumber } from '../src/preprocessors.js'; +import { PhoneUtilManager } from '../src/PhoneUtilManager.js'; + +describe('liveFormatPhoneNumber', () => { + beforeEach(async () => { + // Wait till PhoneUtilManager has been loaded + await PhoneUtilManager.loadComplete; + }); + + it('live formats an incomplete view value', () => { + expect( + liveFormatPhoneNumber('+316123', { + regionCode: 'NL', + formatStrategy: 'international', + prevViewValue: '+36123', + currentCaretIndex: 2, + }), + ).to.eql({ viewValue: '+31 6 123', caretIndex: 4 }); + }); + + it('live formats a complete view value', () => { + expect( + liveFormatPhoneNumber('+31612345678', { + regionCode: 'NL', + formatStrategy: 'international', + prevViewValue: '+3161234578', + currentCaretIndex: 10, + }), + ).to.eql({ caretIndex: 12, viewValue: '+31 6 12345678' }); + }); +}); diff --git a/packages/input-tel/test/validators.test.js b/packages/input-tel/test/validators.test.js new file mode 100644 index 000000000..3fc2fed27 --- /dev/null +++ b/packages/input-tel/test/validators.test.js @@ -0,0 +1,94 @@ +import sinon from 'sinon'; +import { expect, aTimeout } from '@open-wc/testing'; +import { IsPhoneNumber } from '../src/validators.js'; +import { PhoneUtilManager } from '../src/PhoneUtilManager.js'; +import { + mockPhoneUtilManager, + restorePhoneUtilManager, +} from '../test-helpers/mockPhoneUtilManager.js'; + +/** + * @typedef {* & import('@lion/input-tel/lib/awesome-phonenumber-esm').default} PhoneNumber + */ + +// For enum output, see: https://www.npmjs.com/package/awesome-phonenumber +describe('IsPhoneNumber validation', () => { + beforeEach(async () => { + // Wait till PhoneUtilManager has been loaded + await PhoneUtilManager.loadComplete; + }); + + it('is invalid when no input is provided', () => { + const validator = new IsPhoneNumber(); + expect(validator.execute('', 'NL')).to.equal('unknown'); + }); + + it('is invalid when non digits are entered, returns "unknown"', () => { + const validator = new IsPhoneNumber(); + expect(validator.execute('foo', 'NL')).to.equal('unknown'); + }); + + it('is invalid when wrong country code is entered, returns "invalid-country-code"', () => { + const validator = new IsPhoneNumber(); + // 32 is BE region code + expect(validator.execute('+32612345678', 'NL')).to.equal('invalid-country-code'); + }); + + // TODO: find out why awesome-phonenumber does not detect too-short/too-long + it.skip('is invalid when number is too short, returns "too-short"', () => { + const validator = new IsPhoneNumber(); + expect(validator.execute('+3161234567', 'NL')).to.equal('too-short'); + }); + + // TODO: find out why awesome-phonenumber does not detect too-short/too-long + it.skip('is invalid when number is too long, returns "too-long"', () => { + const validator = new IsPhoneNumber(); + expect(validator.execute('+316123456789', 'NL')).to.equal('too-long'); + }); + + it('is valid when a phone number is entered', () => { + const validator = new IsPhoneNumber(); + expect(validator.execute('+31612345678', 'NL')).to.be.false; + }); + + it('handles validation via awesome-phonenumber', () => { + const validator = new IsPhoneNumber(); + const spy = sinon.spy(PhoneUtilManager, 'PhoneNumber'); + validator.execute('0123456789', 'NL'); + expect(spy).to.have.been.calledOnce; + expect(spy.lastCall.args[1]).to.equal('NL'); + validator.execute('0123456789', 'DE'); + expect(spy.lastCall.args[1]).to.equal('DE'); + spy.restore(); + }); + + describe('Lazy loading PhoneUtilManager', () => { + /** @type {(value:any) => void} */ + let resolveLoaded; + beforeEach(() => { + ({ resolveLoaded } = mockPhoneUtilManager()); + }); + + afterEach(() => { + restorePhoneUtilManager(); + }); + + it('behaves asynchronously when lib is still loading', () => { + expect(IsPhoneNumber.async).to.be.true; + resolveLoaded(undefined); + expect(IsPhoneNumber.async).to.be.false; + }); + + it('waits for the lib to be loaded before execution completes when still in async mode', async () => { + const validator = new IsPhoneNumber(); + const spy = sinon.spy(PhoneUtilManager, 'PhoneNumber'); + const validationResult = validator.execute('061234', 'NL'); + expect(validationResult).to.be.instanceOf(Promise); + expect(spy).to.not.have.been.called; + resolveLoaded(undefined); + await aTimeout(0); + expect(spy).to.have.been.calledOnce; + spy.restore(); + }); + }); +}); diff --git a/packages/input-tel/translations/bg-BG.js b/packages/input-tel/translations/bg-BG.js new file mode 100644 index 000000000..00f5e5f61 --- /dev/null +++ b/packages/input-tel/translations/bg-BG.js @@ -0,0 +1,5 @@ +import bg from './bg.js'; + +export default { + ...bg, +}; diff --git a/packages/input-tel/translations/bg.js b/packages/input-tel/translations/bg.js new file mode 100644 index 000000000..e20fb986d --- /dev/null +++ b/packages/input-tel/translations/bg.js @@ -0,0 +1,4 @@ +export default { + selectCountry: 'Избор на държава', + phoneNumber: 'Телефонен номер', +}; diff --git a/packages/input-tel/translations/cs-CZ.js b/packages/input-tel/translations/cs-CZ.js new file mode 100644 index 000000000..2cac51aa8 --- /dev/null +++ b/packages/input-tel/translations/cs-CZ.js @@ -0,0 +1,5 @@ +import cs from './cs.js'; + +export default { + ...cs, +}; diff --git a/packages/input-tel/translations/cs.js b/packages/input-tel/translations/cs.js new file mode 100644 index 000000000..0dd327c6e --- /dev/null +++ b/packages/input-tel/translations/cs.js @@ -0,0 +1,4 @@ +export default { + selectCountry: 'Vybrat zemi', + phoneNumber: 'Telefonní číslo', +}; diff --git a/packages/input-tel/translations/de-DE.js b/packages/input-tel/translations/de-DE.js new file mode 100644 index 000000000..8e3fb7c86 --- /dev/null +++ b/packages/input-tel/translations/de-DE.js @@ -0,0 +1,5 @@ +import de from './de.js'; + +export default { + ...de, +}; diff --git a/packages/input-tel/translations/de.js b/packages/input-tel/translations/de.js new file mode 100644 index 000000000..76278eea5 --- /dev/null +++ b/packages/input-tel/translations/de.js @@ -0,0 +1,4 @@ +export default { + selectCountry: 'Land auswählen', + phoneNumber: 'Telefonnummer', +}; diff --git a/packages/input-tel/translations/en-AU.js b/packages/input-tel/translations/en-AU.js new file mode 100644 index 000000000..e164dab30 --- /dev/null +++ b/packages/input-tel/translations/en-AU.js @@ -0,0 +1,5 @@ +import en from './en.js'; + +export default { + ...en, +}; diff --git a/packages/input-tel/translations/en-GB.js b/packages/input-tel/translations/en-GB.js new file mode 100644 index 000000000..e164dab30 --- /dev/null +++ b/packages/input-tel/translations/en-GB.js @@ -0,0 +1,5 @@ +import en from './en.js'; + +export default { + ...en, +}; diff --git a/packages/input-tel/translations/en-US.js b/packages/input-tel/translations/en-US.js new file mode 100644 index 000000000..e164dab30 --- /dev/null +++ b/packages/input-tel/translations/en-US.js @@ -0,0 +1,5 @@ +import en from './en.js'; + +export default { + ...en, +}; diff --git a/packages/input-tel/translations/en.js b/packages/input-tel/translations/en.js new file mode 100644 index 000000000..425dd3390 --- /dev/null +++ b/packages/input-tel/translations/en.js @@ -0,0 +1,4 @@ +export default { + selectCountry: 'Select country', + phoneNumber: 'Phone number', +}; diff --git a/packages/input-tel/translations/es-ES.js b/packages/input-tel/translations/es-ES.js new file mode 100644 index 000000000..94a009944 --- /dev/null +++ b/packages/input-tel/translations/es-ES.js @@ -0,0 +1,5 @@ +import es from './es.js'; + +export default { + ...es, +}; diff --git a/packages/input-tel/translations/es.js b/packages/input-tel/translations/es.js new file mode 100644 index 000000000..7c3122310 --- /dev/null +++ b/packages/input-tel/translations/es.js @@ -0,0 +1,4 @@ +export default { + selectCountry: 'Seleccione país', + phoneNumber: 'Número de teléfono', +}; diff --git a/packages/input-tel/translations/fr-BE.js b/packages/input-tel/translations/fr-BE.js new file mode 100644 index 000000000..da02615de --- /dev/null +++ b/packages/input-tel/translations/fr-BE.js @@ -0,0 +1,5 @@ +import fr from './fr.js'; + +export default { + ...fr, +}; diff --git a/packages/input-tel/translations/fr-FR.js b/packages/input-tel/translations/fr-FR.js new file mode 100644 index 000000000..da02615de --- /dev/null +++ b/packages/input-tel/translations/fr-FR.js @@ -0,0 +1,5 @@ +import fr from './fr.js'; + +export default { + ...fr, +}; diff --git a/packages/input-tel/translations/fr.js b/packages/input-tel/translations/fr.js new file mode 100644 index 000000000..1ce32e428 --- /dev/null +++ b/packages/input-tel/translations/fr.js @@ -0,0 +1,4 @@ +export default { + selectCountry: 'Sélectionnez un pays', + phoneNumber: 'Numéro de téléphone', +}; diff --git a/packages/input-tel/translations/hu-HU.js b/packages/input-tel/translations/hu-HU.js new file mode 100644 index 000000000..130ba8f66 --- /dev/null +++ b/packages/input-tel/translations/hu-HU.js @@ -0,0 +1,5 @@ +import hu from './hu.js'; + +export default { + ...hu, +}; diff --git a/packages/input-tel/translations/hu.js b/packages/input-tel/translations/hu.js new file mode 100644 index 000000000..2d380d273 --- /dev/null +++ b/packages/input-tel/translations/hu.js @@ -0,0 +1,4 @@ +export default { + selectCountry: 'Ország kiválasztása', + phoneNumber: 'Telefonszám', +}; diff --git a/packages/input-tel/translations/it-IT.js b/packages/input-tel/translations/it-IT.js new file mode 100644 index 000000000..397b5a03b --- /dev/null +++ b/packages/input-tel/translations/it-IT.js @@ -0,0 +1,5 @@ +import it from './it.js'; + +export default { + ...it, +}; diff --git a/packages/input-tel/translations/it.js b/packages/input-tel/translations/it.js new file mode 100644 index 000000000..6ad426bb4 --- /dev/null +++ b/packages/input-tel/translations/it.js @@ -0,0 +1,4 @@ +export default { + selectCountry: 'Selezionare il paese', + phoneNumber: 'Numero di telefono', +}; diff --git a/packages/input-tel/translations/nl-BE.js b/packages/input-tel/translations/nl-BE.js new file mode 100644 index 000000000..93467cea6 --- /dev/null +++ b/packages/input-tel/translations/nl-BE.js @@ -0,0 +1,5 @@ +import nl from './nl.js'; + +export default { + ...nl, +}; diff --git a/packages/input-tel/translations/nl-NL.js b/packages/input-tel/translations/nl-NL.js new file mode 100644 index 000000000..93467cea6 --- /dev/null +++ b/packages/input-tel/translations/nl-NL.js @@ -0,0 +1,5 @@ +import nl from './nl.js'; + +export default { + ...nl, +}; diff --git a/packages/input-tel/translations/nl.js b/packages/input-tel/translations/nl.js new file mode 100644 index 000000000..1f096445b --- /dev/null +++ b/packages/input-tel/translations/nl.js @@ -0,0 +1,4 @@ +export default { + selectCountry: 'Selecteer land', + phoneNumber: 'Telefoonnummer', +}; diff --git a/packages/input-tel/translations/pl-PL.js b/packages/input-tel/translations/pl-PL.js new file mode 100644 index 000000000..cb0d0b8b6 --- /dev/null +++ b/packages/input-tel/translations/pl-PL.js @@ -0,0 +1,5 @@ +import pl from './pl.js'; + +export default { + ...pl, +}; diff --git a/packages/input-tel/translations/pl.js b/packages/input-tel/translations/pl.js new file mode 100644 index 000000000..ba2dc5a97 --- /dev/null +++ b/packages/input-tel/translations/pl.js @@ -0,0 +1,4 @@ +export default { + selectCountry: 'Wybierz kraj', + phoneNumber: 'Numer telefonu', +}; diff --git a/packages/input-tel/translations/ro-RO.js b/packages/input-tel/translations/ro-RO.js new file mode 100644 index 000000000..8acc92b29 --- /dev/null +++ b/packages/input-tel/translations/ro-RO.js @@ -0,0 +1,5 @@ +import ro from './ro.js'; + +export default { + ...ro, +}; diff --git a/packages/input-tel/translations/ro.js b/packages/input-tel/translations/ro.js new file mode 100644 index 000000000..a1d485c7b --- /dev/null +++ b/packages/input-tel/translations/ro.js @@ -0,0 +1,4 @@ +export default { + selectCountry: 'Selectare țară', + phoneNumber: 'Număr de telefon', +}; diff --git a/packages/input-tel/translations/ru-RU.js b/packages/input-tel/translations/ru-RU.js new file mode 100644 index 000000000..e5f8f2aa1 --- /dev/null +++ b/packages/input-tel/translations/ru-RU.js @@ -0,0 +1,5 @@ +import ru from './ru.js'; + +export default { + ...ru, +}; diff --git a/packages/input-tel/translations/ru.js b/packages/input-tel/translations/ru.js new file mode 100644 index 000000000..4a922f844 --- /dev/null +++ b/packages/input-tel/translations/ru.js @@ -0,0 +1,4 @@ +export default { + selectCountry: 'Выбрать страну', + phoneNumber: 'Номер телефона', +}; diff --git a/packages/input-tel/translations/sk-SK.js b/packages/input-tel/translations/sk-SK.js new file mode 100644 index 000000000..3000b323f --- /dev/null +++ b/packages/input-tel/translations/sk-SK.js @@ -0,0 +1,5 @@ +import sk from './sk.js'; + +export default { + ...sk, +}; diff --git a/packages/input-tel/translations/sk.js b/packages/input-tel/translations/sk.js new file mode 100644 index 000000000..51587dc57 --- /dev/null +++ b/packages/input-tel/translations/sk.js @@ -0,0 +1,4 @@ +export default { + selectCountry: 'Zvoliť krajinu', + phoneNumber: 'Telefónne číslo', +}; diff --git a/packages/input-tel/translations/uk-UA.js b/packages/input-tel/translations/uk-UA.js new file mode 100644 index 000000000..e255cc021 --- /dev/null +++ b/packages/input-tel/translations/uk-UA.js @@ -0,0 +1,5 @@ +import uk from './uk.js'; + +export default { + ...uk, +}; diff --git a/packages/input-tel/translations/uk.js b/packages/input-tel/translations/uk.js new file mode 100644 index 000000000..1218d2e94 --- /dev/null +++ b/packages/input-tel/translations/uk.js @@ -0,0 +1,4 @@ +export default { + selectCountry: 'Вибрати країну', + phoneNumber: 'Номер телефону', +}; diff --git a/packages/input-tel/translations/zh.js b/packages/input-tel/translations/zh.js new file mode 100644 index 000000000..db68955ab --- /dev/null +++ b/packages/input-tel/translations/zh.js @@ -0,0 +1,4 @@ +export default { + selectCountry: '选择国家/地区', + phoneNumber: '电话号码', +}; diff --git a/packages/input-tel/types/index.d.ts b/packages/input-tel/types/index.d.ts new file mode 100644 index 000000000..7ca6bcafb --- /dev/null +++ b/packages/input-tel/types/index.d.ts @@ -0,0 +1,290 @@ +/* + * Phone number types as provided by google-libphonenumber + * See: + * - https://www.npmjs.com/package/google-libphonenumber + * - https://www.npmjs.com/package/awesome-phonenumber + */ +export type PhoneNumberType = + | 'fixed-line' + | 'fixed-line-or-mobile' + | 'mobile' + | 'pager' + | 'personal-number' + | 'premium-rate' + | 'shared-cost' + | 'toll-free' + | 'uan' + | 'voip' + | 'unknown'; + +/* + * Phone number possibilities as provided by google-libphonenumber + * See: + * - https://www.npmjs.com/package/google-libphonenumber + * - https://www.npmjs.com/package/awesome-phonenumber + */ +export type PhoneNumberPossibility = + | 'is-possible' + | 'invalid-country-code' + | 'too-long' + | 'too-short' + | 'unknown'; + +/* + * Phone number formats / formatting strategies as provided by google-libphonenumber + * See: + * - https://www.npmjs.com/package/google-libphonenumber + * - https://www.npmjs.com/package/awesome-phonenumber + */ +export type FormatStrategy = 'e164' | 'international' | 'national' | 'rfc3966' | 'significant'; + +/** + * Supported countries/regions as provided via + * `libphonenumber.PhoneNumberUtil.getInstance().getSupportedRegions()` + */ +export type RegionCode = + | 'AC' + | 'AD' + | 'AE' + | 'AF' + | 'AG' + | 'AI' + | 'AL' + | 'AM' + | 'AO' + | 'AR' + | 'AS' + | 'AT' + | 'AU' + | 'AW' + | 'AX' + | 'AZ' + | 'BA' + | 'BB' + | 'BD' + | 'BE' + | 'BF' + | 'BG' + | 'BH' + | 'BI' + | 'BJ' + | 'BL' + | 'BM' + | 'BN' + | 'BO' + | 'BQ' + | 'BR' + | 'BS' + | 'BT' + | 'BW' + | 'BY' + | 'BZ' + | 'CA' + | 'CC' + | 'CD' + | 'CF' + | 'CG' + | 'CH' + | 'CI' + | 'CK' + | 'CL' + | 'CM' + | 'CN' + | 'CO' + | 'CR' + | 'CU' + | 'CV' + | 'CW' + | 'CX' + | 'CY' + | 'CZ' + | 'DE' + | 'DJ' + | 'DK' + | 'DM' + | 'DO' + | 'DZ' + | 'EC' + | 'EE' + | 'EG' + | 'EH' + | 'ER' + | 'ES' + | 'ET' + | 'FI' + | 'FJ' + | 'FK' + | 'FM' + | 'FO' + | 'FR' + | 'GA' + | 'GB' + | 'GD' + | 'GE' + | 'GF' + | 'GG' + | 'GH' + | 'GI' + | 'GL' + | 'GM' + | 'GN' + | 'GP' + | 'GQ' + | 'GR' + | 'GT' + | 'GU' + | 'GW' + | 'GY' + | 'HK' + | 'HN' + | 'HR' + | 'HT' + | 'HU' + | 'ID' + | 'IE' + | 'IL' + | 'IM' + | 'IN' + | 'IO' + | 'IQ' + | 'IR' + | 'IS' + | 'IT' + | 'JE' + | 'JM' + | 'JO' + | 'JP' + | 'KE' + | 'KG' + | 'KH' + | 'KI' + | 'KM' + | 'KN' + | 'KP' + | 'KR' + | 'KW' + | 'KY' + | 'KZ' + | 'LA' + | 'LB' + | 'LC' + | 'LI' + | 'LK' + | 'LR' + | 'LS' + | 'LT' + | 'LU' + | 'LV' + | 'LY' + | 'MA' + | 'MC' + | 'MD' + | 'ME' + | 'MF' + | 'MG' + | 'MH' + | 'MK' + | 'ML' + | 'MM' + | 'MN' + | 'MO' + | 'MP' + | 'MQ' + | 'MR' + | 'MS' + | 'MT' + | 'MU' + | 'MV' + | 'MW' + | 'MX' + | 'MY' + | 'MZ' + | 'NA' + | 'NC' + | 'NE' + | 'NF' + | 'NG' + | 'NI' + | 'NL' + | 'NO' + | 'NP' + | 'NR' + | 'NU' + | 'NZ' + | 'OM' + | 'PA' + | 'PE' + | 'PF' + | 'PG' + | 'PH' + | 'PK' + | 'PL' + | 'PM' + | 'PR' + | 'PS' + | 'PT' + | 'PW' + | 'PY' + | 'QA' + | 'RE' + | 'RO' + | 'RS' + | 'RU' + | 'RW' + | 'SA' + | 'SB' + | 'SC' + | 'SD' + | 'SE' + | 'SG' + | 'SH' + | 'SI' + | 'SJ' + | 'SK' + | 'SL' + | 'SM' + | 'SN' + | 'SO' + | 'SR' + | 'SS' + | 'ST' + | 'SV' + | 'SX' + | 'SY' + | 'SZ' + | 'TA' + | 'TC' + | 'TD' + | 'TG' + | 'TH' + | 'TJ' + | 'TK' + | 'TL' + | 'TM' + | 'TN' + | 'TO' + | 'TR' + | 'TT' + | 'TV' + | 'TW' + | 'TZ' + | 'UA' + | 'UG' + | 'US' + | 'UY' + | 'UZ' + | 'VA' + | 'VC' + | 'VE' + | 'VG' + | 'VI' + | 'VN' + | 'VU' + | 'WF' + | 'WS' + | 'XK' + | 'YE' + | 'YT' + | 'ZA' + | 'ZM' + | 'ZW'; From 32b322c37e4bc5faeb2c2e258b543d6208e9a42b Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Tue, 15 Mar 2022 19:52:26 +0100 Subject: [PATCH 13/19] feat(input-tel-dropdown): new component LionInputTelDropdown Co-authored-by: David Vossen --- .changeset/big-geese-run.md | 5 + .../inputs/input-tel-dropdown/examples.md | 28 ++ .../inputs/input-tel-dropdown/features.md | 72 ++++ .../inputs/input-tel-dropdown/index.md | 3 + .../inputs/input-tel-dropdown/overview.md | 36 ++ .../src/intl-input-tel-dropdown.js | 124 ++++++ packages/input-tel-dropdown/README.md | 3 + packages/input-tel-dropdown/define.js | 1 + packages/input-tel-dropdown/docs/features.md | 3 + packages/input-tel-dropdown/docs/overview.md | 3 + packages/input-tel-dropdown/index.js | 1 + .../lion-input-tel-dropdown.js | 3 + packages/input-tel-dropdown/package.json | 58 +++ .../src/LionInputTelDropdown.js | 375 ++++++++++++++++++ .../test-suites/LionInputTelDropdown.suite.js | 226 +++++++++++ .../test/LionInputTelDropdown.test.js | 49 +++ packages/input-tel-dropdown/types/index.d.ts | 44 ++ 17 files changed, 1034 insertions(+) create mode 100644 .changeset/big-geese-run.md create mode 100644 docs/components/inputs/input-tel-dropdown/examples.md create mode 100644 docs/components/inputs/input-tel-dropdown/features.md create mode 100644 docs/components/inputs/input-tel-dropdown/index.md create mode 100644 docs/components/inputs/input-tel-dropdown/overview.md create mode 100644 docs/components/inputs/input-tel-dropdown/src/intl-input-tel-dropdown.js create mode 100644 packages/input-tel-dropdown/README.md create mode 100644 packages/input-tel-dropdown/define.js create mode 100644 packages/input-tel-dropdown/docs/features.md create mode 100644 packages/input-tel-dropdown/docs/overview.md create mode 100644 packages/input-tel-dropdown/index.js create mode 100644 packages/input-tel-dropdown/lion-input-tel-dropdown.js create mode 100644 packages/input-tel-dropdown/package.json create mode 100644 packages/input-tel-dropdown/src/LionInputTelDropdown.js create mode 100644 packages/input-tel-dropdown/test-suites/LionInputTelDropdown.suite.js create mode 100644 packages/input-tel-dropdown/test/LionInputTelDropdown.test.js create mode 100644 packages/input-tel-dropdown/types/index.d.ts diff --git a/.changeset/big-geese-run.md b/.changeset/big-geese-run.md new file mode 100644 index 000000000..916c3afd8 --- /dev/null +++ b/.changeset/big-geese-run.md @@ -0,0 +1,5 @@ +--- +'@lion/input-tel-dropdown': minor +--- + +New component LionInpuTelDropdown diff --git a/docs/components/inputs/input-tel-dropdown/examples.md b/docs/components/inputs/input-tel-dropdown/examples.md new file mode 100644 index 000000000..60d258b4b --- /dev/null +++ b/docs/components/inputs/input-tel-dropdown/examples.md @@ -0,0 +1,28 @@ +# Inputs >> Input Tel Dropdown >> Examples ||30 + +```js script +import { html } from '@mdjs/mdjs-preview'; +import '@lion/select-rich/define'; +import './src/intl-input-tel-dropdown.js'; +``` + +## Input Tel International + +A visually advanced Subclasser implementation of `LionInputTelDropdown`. + +Inspired by: + +- [intl-tel-input](https://intl-tel-input.com/) +- [react-phone-input-2](https://github.com/bl00mber/react-phone-input-2) + +```js preview-story +export const IntlInputTelDropdown = () => html` + +`; +``` diff --git a/docs/components/inputs/input-tel-dropdown/features.md b/docs/components/inputs/input-tel-dropdown/features.md new file mode 100644 index 000000000..42478e6d5 --- /dev/null +++ b/docs/components/inputs/input-tel-dropdown/features.md @@ -0,0 +1,72 @@ +# Inputs >> Input Tel Dropdown >> Features ||20 + +```js script +import { html } from '@mdjs/mdjs-preview'; +import { ref, createRef } from '@lion/core'; +import { loadDefaultFeedbackMessages } from '@lion/validate-messages'; +import { PhoneUtilManager } from '@lion/input-tel'; +import '@lion/input-tel-dropdown/define'; +import '../../../docs/systems/form/assets/h-output.js'; +``` + +## Input Tel Dropdown + +When `.allowedRegions` is not configured, all regions/countries will be available in the dropdown +list. Once a region is chosen, its country/dial code will be adjusted with that of the new locale. + +```js preview-story +export const InputTelDropdown = () => html` + + +`; +``` + +## Allowed regions + +When `.allowedRegions` is configured, only those regions/countries will be available in the dropdown +list. + +```js preview-story +export const allowedRegions = () => html` + + +`; +``` + +## Preferred regions + +When `.preferredRegions` is configured, they will show up on top of the dropdown list to +enhance user experience. + +```js preview-story +export const preferredRegionCodes = () => html` + + +`; +``` diff --git a/docs/components/inputs/input-tel-dropdown/index.md b/docs/components/inputs/input-tel-dropdown/index.md new file mode 100644 index 000000000..f2453e8bd --- /dev/null +++ b/docs/components/inputs/input-tel-dropdown/index.md @@ -0,0 +1,3 @@ +# Inputs >> Input Tel Dropdown ||20 + +-> go to Overview diff --git a/docs/components/inputs/input-tel-dropdown/overview.md b/docs/components/inputs/input-tel-dropdown/overview.md new file mode 100644 index 000000000..7a6d46dba --- /dev/null +++ b/docs/components/inputs/input-tel-dropdown/overview.md @@ -0,0 +1,36 @@ +# Inputs >> Input Tel Dropdown >> Overview ||10 + +Extension of Input Tel that prefixes a dropdown list that shows all possible regions / countries. + +```js script +import { html } from '@mdjs/mdjs-preview'; +import '@lion/input-tel-dropdown/define'; +``` + +```js preview-story +export const main = () => { + return html` + + `; +}; +``` + +## Features + +- Extends our [input-tel](../input-tel/overview.md) +- Shows dropdown list with all possible regions +- Shows only allowed regions in dropdown list when .allowedRegions is configured +- Highlights regions on top of dropdown list when .preferredRegions is configured +- Generates template meta data for advanced + +## Installation + +```bash +npm i --save @lion/input-tel-dropdown +``` + +```js +import { LionInputTelDropdown } from '@lion/input-tel-dropdown'; +// or +import '@lion/input-tel-dropdown/define'; +``` diff --git a/docs/components/inputs/input-tel-dropdown/src/intl-input-tel-dropdown.js b/docs/components/inputs/input-tel-dropdown/src/intl-input-tel-dropdown.js new file mode 100644 index 000000000..08bdefb21 --- /dev/null +++ b/docs/components/inputs/input-tel-dropdown/src/intl-input-tel-dropdown.js @@ -0,0 +1,124 @@ +import { html, css, ScopedElementsMixin, ref, repeat } from '@lion/core'; +import { LionInputTelDropdown } from '@lion/input-tel-dropdown'; +import { + IntlSelectRich, + IntlOption, + IntlSeparator, +} from '../../select-rich/src/intl-select-rich.js'; + +/** + * @typedef {import('@lion/input-tel-dropdown/types').TemplateDataForDropdownInputTel}TemplateDataForDropdownInputTel + */ + +// Example implementation for https://intl-tel-input.com/ +export class IntlInputTelDropdown extends ScopedElementsMixin(LionInputTelDropdown) { + /** + * @configure LitElement + * @enhance LionInputTelDropdown + */ + static styles = [ + super.styles, + css` + :host, + ::slotted(*) { + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + } + + :host { + max-width: 300px; + } + + .input-group__container { + width: 100%; + height: 34px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgb(0 0 0 / 8%); + box-shadow: inset 0 1px 1px rgb(0 0 0 / 8%); + -webkit-transition: border-color ease-in-out 0.15s, -webkit-box-shadow ease-in-out 0.15s; + -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + } + + .input-group__input { + padding: 6px; + box-sizing: border-box; + } + + .input-group__input ::slotted(input) { + border: none; + outline: none; + } + + :host([focused]) .input-group__container { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgb(0 0 0 / 8%), 0 0 8px rgb(102 175 233 / 60%); + box-shadow: inset 0 1px 1px rgb(0 0 0 / 8%), 0 0 8px rgb(102 175 233 / 60%); + } + `, + ]; + + static templates = { + ...(super.templates || {}), + /** + * @param {TemplateDataForDropdownInputTel} templateDataForDropdown + */ + dropdown: templateDataForDropdown => { + const { refs, data } = templateDataForDropdown; + // TODO: once spread directive available, use it per ref (like ref(refs?.dropdown?.ref)) + return html` + + ${data?.regionMetaListPreferred?.length + ? html` ${repeat( + data.regionMetaListPreferred, + regionMeta => regionMeta.regionCode, + regionMeta => + html`${this.templates.dropdownOption(templateDataForDropdown, regionMeta)} `, + )}` + : ''} + ${repeat( + data.regionMetaList, + regionMeta => regionMeta.regionCode, + regionMeta => + html`${this.templates.dropdownOption(templateDataForDropdown, regionMeta)} `, + )} + + `; + }, + /** + * @param {TemplateDataForDropdownInputTel} templateDataForDropdown + * @param {RegionMeta} regionMeta + */ + // eslint-disable-next-line class-methods-use-this + dropdownOption: (templateDataForDropdown, regionMeta) => html` + + + `, + }; + + /** + * @configure ScopedElementsMixin + */ + static scopedElements = { + ...super.scopedElements, + 'intl-select-rich': IntlSelectRich, + 'intl-option': IntlOption, + 'intl-separator': IntlSeparator, + }; +} +customElements.define('intl-input-tel-dropdown', IntlInputTelDropdown); diff --git a/packages/input-tel-dropdown/README.md b/packages/input-tel-dropdown/README.md new file mode 100644 index 000000000..15477ff9c --- /dev/null +++ b/packages/input-tel-dropdown/README.md @@ -0,0 +1,3 @@ +# Lion Input Tel + +[=> See Source <=](../../docs/components/inputs/input-tel/overview.md) diff --git a/packages/input-tel-dropdown/define.js b/packages/input-tel-dropdown/define.js new file mode 100644 index 000000000..f7d4be162 --- /dev/null +++ b/packages/input-tel-dropdown/define.js @@ -0,0 +1 @@ +import './lion-input-tel-dropdown.js'; diff --git a/packages/input-tel-dropdown/docs/features.md b/packages/input-tel-dropdown/docs/features.md new file mode 100644 index 000000000..f6da18052 --- /dev/null +++ b/packages/input-tel-dropdown/docs/features.md @@ -0,0 +1,3 @@ +# Lion Input Tel Dropdown Features + +[=> See Source <=](../../../docs/components/inputs/input-tel-dropdown/features.md) diff --git a/packages/input-tel-dropdown/docs/overview.md b/packages/input-tel-dropdown/docs/overview.md new file mode 100644 index 000000000..b823a3e67 --- /dev/null +++ b/packages/input-tel-dropdown/docs/overview.md @@ -0,0 +1,3 @@ +# Lion Input Tel Dropdown Overview + +[=> See Source <=](../../../docs/components/inputs/input-tel-dropdown/overview.md) diff --git a/packages/input-tel-dropdown/index.js b/packages/input-tel-dropdown/index.js new file mode 100644 index 000000000..bcce24fb2 --- /dev/null +++ b/packages/input-tel-dropdown/index.js @@ -0,0 +1 @@ +export { LionInputTelDropdown } from './src/LionInputTelDropdown.js'; diff --git a/packages/input-tel-dropdown/lion-input-tel-dropdown.js b/packages/input-tel-dropdown/lion-input-tel-dropdown.js new file mode 100644 index 000000000..d696e2c09 --- /dev/null +++ b/packages/input-tel-dropdown/lion-input-tel-dropdown.js @@ -0,0 +1,3 @@ +import { LionInputTelDropdown } from './src/LionInputTelDropdown.js'; + +customElements.define('lion-input-tel-dropdown', LionInputTelDropdown); diff --git a/packages/input-tel-dropdown/package.json b/packages/input-tel-dropdown/package.json new file mode 100644 index 000000000..2fa856524 --- /dev/null +++ b/packages/input-tel-dropdown/package.json @@ -0,0 +1,58 @@ +{ + "name": "@lion/input-tel-dropdown", + "version": "0.0.0", + "description": "Input field for entering phone numbers with the help of a dropdown region list", + "license": "MIT", + "author": "ing-bank", + "homepage": "https://github.com/ing-bank/lion/", + "repository": { + "type": "git", + "url": "https://github.com/ing-bank/lion.git", + "directory": "packages/input-tel-dropdown" + }, + "main": "index.js", + "module": "index.js", + "files": [ + "*.d.ts", + "*.js", + "custom-elements.json", + "docs", + "src", + "test", + "types" + ], + "scripts": { + "custom-elements-manifest": "custom-elements-manifest analyze --litelement --exclude \"docs/**/*\" \"test-helpers/**/*\"", + "debug": "cd ../../ && npm run debug -- --group input-tel-dropdown", + "debug:firefox": "cd ../../ && npm run debug:firefox -- --group input-tel-dropdown", + "debug:webkit": "cd ../../ && npm run debug:webkit -- --group input-tel-dropdown", + "publish-docs": "node ../../packages-node/publish-docs/src/cli.js --github-url https://github.com/ing-bank/lion/ --git-root-dir ../../", + "prepublishOnly": "npm run publish-docs && npm run custom-elements-manifest", + "test": "cd ../../ && npm run test:browser -- --group input-tel-dropdown" + }, + "sideEffects": [ + "lion-input-tel-dropdown.js" + ], + "dependencies": { + "@lion/core": "0.21.1", + "@lion/input-tel": "0.0.0", + "@lion/localize": "0.23.0" + }, + "keywords": [ + "input", + "input-tel-dropdown", + "lion", + "web-components" + ], + "publishConfig": { + "access": "public" + }, + "customElements": "custom-elements.json", + "customElementsManifest": "custom-elements.json", + "exports": { + ".": "./index.js", + "./define": "./define.js", + "./test-suites": "./test-suites/index.js", + "./docs/*": "./docs/*" + } +} diff --git a/packages/input-tel-dropdown/src/LionInputTelDropdown.js b/packages/input-tel-dropdown/src/LionInputTelDropdown.js new file mode 100644 index 000000000..de9ec97d9 --- /dev/null +++ b/packages/input-tel-dropdown/src/LionInputTelDropdown.js @@ -0,0 +1,375 @@ +// @ts-expect-error ref, createRef are exported (?) +import { render, html, css, ref, createRef } from '@lion/core'; +import { LionInputTel } from '@lion/input-tel'; + +/** + * Note: one could consider to implement LionInputTelDropdown as a + * [combobox](https://www.w3.org/TR/wai-aria-practices-1.2/#combobox). + * However, the country dropdown does not directly set the textbox value, it only determines + * its region code. Therefore it does not comply to this criterium: + * "A combobox is an input widget with an associated popup that enables users to select a value for + * the combobox from a collection of possible values. In some implementations, + * the popup presents allowed values, while in other implementations, the popup presents suggested + * values, and users may either select one of the suggestions or type a value". + * We therefore decided to consider the dropdown a helper mechanism that does not set, but + * contributes to and helps format and validate the actual value. + */ + +/** + * @typedef {import('lit/directives/ref.js').Ref} Ref + * @typedef {import('@lion/core').RenderOptions} RenderOptions + * @typedef {import('@lion/form-core/types/FormatMixinTypes').FormatHost} FormatHost + * @typedef {import('@lion/input-tel/types').FormatStrategy} FormatStrategy + * @typedef {import('@lion/input-tel/types').RegionCode} RegionCode + * @typedef {import('../types').TemplateDataForDropdownInputTel} TemplateDataForDropdownInputTel + * @typedef {import('../types').OnDropdownChangeEvent} OnDropdownChangeEvent + * @typedef {import('../types').DropdownRef} DropdownRef + * @typedef {import('../types').RegionMeta} RegionMeta + * @typedef {* & import('@lion/input-tel/lib/awesome-phonenumber-esm').default} PhoneNumber + * @typedef {import('@lion/select-rich').LionSelectRich} LionSelectRich + * @typedef {import('@lion/overlays').OverlayController} OverlayController + * @typedef {TemplateDataForDropdownInputTel & {data: {regionMetaList:RegionMeta[]}}} TemplateDataForIntlInputTel + */ + +// eslint-disable-next-line prefer-destructuring +/** + * @param {string} char + */ +function getRegionalIndicatorSymbol(char) { + return String.fromCodePoint(0x1f1e6 - 65 + char.toUpperCase().charCodeAt(0)); +} + +/** + * LionInputTelDropdown renders a dropdown like element next to the text field, inside the + * prefix slot. This could be a LionSelect, a LionSelectRich or a native select. + * By default, the native ` + ${data?.regionMetaListPreferred?.length + ? html` + ${data.regionMetaListPreferred.map(renderOption)} + + ${data?.regionMetaList?.map(renderOption)} + ` + : html` ${data?.regionMetaList?.map(renderOption)}`} + + `; + }, + /** + * @param {TemplateDataForDropdownInputTel} templateDataForDropdown + * @param {RegionMeta} contextData + */ + // eslint-disable-next-line class-methods-use-this + dropdownOption: (templateDataForDropdown, { regionCode, countryCode, flagSymbol }) => html` + + `, + }; + + /** + * @configure LitElement + * @enhance LionInputTel + */ + static styles = [ + super.styles, + css` + /** + * We need to align the height of the dropdown with the height of the text field. + * We target the HTMLDivElement 'this.__dropdownRenderParent' here. Its child, + * [data-ref=dropdown], recieves a 100% height as well via inline styles (since we + * can't target from shadow styles). + */ + ::slotted([slot='prefix']) { + height: 100%; + } + `, + ]; + + /** + * @configure SlotMixin + */ + get slots() { + return { + ...super.slots, + prefix: () => this.__dropdownRenderParent, + }; + } + + /** + * @configure LocalizeMixin + */ + onLocaleUpdated() { + super.onLocaleUpdated(); + + // @ts-expect-error relatively new platform api + this.__namesForLocale = new Intl.DisplayNames([this._langIso], { + type: 'region', + }); + this.__createRegionMeta(); + this._scheduleLightDomRender(); + } + + /** + * @enhance LionInputTel + */ + _onPhoneNumberUtilReady() { + super._onPhoneNumberUtilReady(); + this.__createRegionMeta(); + } + + /** + * @lifecycle platform + */ + constructor() { + super(); + + /** + * Regions that will be shown on top of the dropdown + * @type {string[]} + */ + this.preferredRegions = []; + + /** @type {HTMLDivElement} */ + this.__dropdownRenderParent = document.createElement('div'); + + /** + * Contains everything needed for rendering region options: + * region code, country code, display name according to locale, display name + * @type {RegionMeta[]} + */ + this.__regionMetaList = []; + + /** + * A filtered `this.__regionMetaList`, containing all regions provided in `preferredRegions` + * @type {RegionMeta[]} + */ + this.__regionMetaListPreferred = []; + + /** @type {EventListener} */ + this._onDropdownValueChange = this._onDropdownValueChange.bind(this); + /** @type {EventListener} */ + this.__syncRegionWithDropdown = this.__syncRegionWithDropdown.bind(this); + } + + /** + * @lifecycle LitElement + * @param {import('lit-element').PropertyValues } changedProperties + */ + willUpdate(changedProperties) { + super.willUpdate(changedProperties); + + if (changedProperties.has('allowedRegions')) { + this.__createRegionMeta(); + } + } + + /** + * @param {import('lit-element').PropertyValues } changedProperties + */ + updated(changedProperties) { + super.updated(changedProperties); + + if (changedProperties.has('_needsLightDomRender')) { + this.__renderDropdown(); + } + if (changedProperties.has('activeRegion')) { + this.__syncRegionWithDropdown(); + } + } + + /** + * @protected + * @param {OnDropdownChangeEvent} event + */ + _onDropdownValueChange(event) { + const isInitializing = event.detail?.initialize || !this._phoneUtil; + if (isInitializing) { + return; + } + + const prevActiveRegion = this.activeRegion; + this._setActiveRegion( + /** @type {RegionCode} */ (event.target.value || event.target.modelValue), + ); + + // Change region code in text box + // From: https://bl00mber.github.io/react-phone-input-2.html + if (prevActiveRegion !== this.activeRegion && !this.focused && this._phoneUtil) { + const prevCountryCode = this._phoneUtil.getCountryCodeForRegionCode(prevActiveRegion); + const countryCode = this._phoneUtil.getCountryCodeForRegionCode(this.activeRegion); + if (countryCode && !this.modelValue) { + // When textbox is empty, prefill it with country code + this.modelValue = `+${countryCode}`; + } else if (prevCountryCode && countryCode) { + // When textbox is not empty, replace country code + this.modelValue = this._callParser( + this.value.replace(`+${prevCountryCode}`, `+${countryCode}`), + ); + } + } + + // Put focus on text box + const overlayController = event.target._overlayCtrl; + if (overlayController?.isShown) { + setTimeout(() => { + this._inputNode.focus(); + }); + } else { + // For native select + this._inputNode.focus(); + } + } + + /** + * Abstract away rendering to light dom, so that we can rerender when needed + * @private + */ + __renderDropdown() { + const ctor = /** @type {typeof LionInputTelDropdown} */ (this.constructor); + // If the user locally overrode the templates, get those on the instance + const templates = this.templates || ctor.templates; + render( + templates.dropdown(this._templateDataDropdown), + this.__dropdownRenderParent, + /** @type {RenderOptions} */ ({ + scopeName: this.localName, + eventContext: this, + }), + ); + this.__syncRegionWithDropdown(); + } + + /** + * @private + */ + __syncRegionWithDropdown(regionCode = this.activeRegion) { + const dropdownElement = this.refs.dropdown?.value; + if (!dropdownElement || !regionCode) { + return; + } + if ('modelValue' in dropdownElement) { + /** @type {* & FormatHost} */ (dropdownElement).modelValue = regionCode; + } else { + /** @type {HTMLSelectElement} */ (dropdownElement).value = regionCode; + } + } + + /** + * Prepares data for options, like "Greece (Ελλάδα)", where "Greece" is `nameForLocale` and + * "Ελλάδα" `nameForRegion`. + * This should be run on change of: + * - allowedRegions + * - _phoneUtil loaded + * - locale + * @private + */ + __createRegionMeta() { + if (!this._allowedOrAllRegions?.length || !this.__namesForLocale) { + return; + } + this.__regionMetaList = []; + this.__regionMetaListPreferred = []; + this._allowedOrAllRegions.forEach(regionCode => { + // @ts-expect-error Intl.DisplayNames platform api not yet typed + const namesForRegion = new Intl.DisplayNames([regionCode.toLowerCase()], { + type: 'region', + }); + const countryCode = + this._phoneUtil && this._phoneUtil.getCountryCodeForRegionCode(regionCode); + + const flagSymbol = + getRegionalIndicatorSymbol(regionCode[0]) + getRegionalIndicatorSymbol(regionCode[1]); + + const destinationList = this.preferredRegions.includes(regionCode) + ? this.__regionMetaListPreferred + : this.__regionMetaList; + + destinationList.push({ + regionCode, + countryCode, + flagSymbol, + nameForLocale: this.__namesForLocale.of(regionCode), + nameForRegion: namesForRegion.of(regionCode), + }); + }); + } +} diff --git a/packages/input-tel-dropdown/test-suites/LionInputTelDropdown.suite.js b/packages/input-tel-dropdown/test-suites/LionInputTelDropdown.suite.js new file mode 100644 index 000000000..661e01671 --- /dev/null +++ b/packages/input-tel-dropdown/test-suites/LionInputTelDropdown.suite.js @@ -0,0 +1,226 @@ +import { + expect, + fixture as _fixture, + fixtureSync as _fixtureSync, + html, + defineCE, + unsafeStatic, + aTimeout, +} from '@open-wc/testing'; +import sinon from 'sinon'; +// @ts-ignore +import { PhoneUtilManager } from '@lion/input-tel'; +// @ts-ignore +import { mockPhoneUtilManager, restorePhoneUtilManager } from '@lion/input-tel/test-helpers'; +import { LionInputTelDropdown } from '../src/LionInputTelDropdown.js'; + +/** + * @typedef {import('@lion/core').TemplateResult} TemplateResult + * @typedef {HTMLSelectElement|HTMLElement & {modelValue:string}} DropdownElement + * @typedef {import('../types').TemplateDataForDropdownInputTel} TemplateDataForDropdownInputTel + */ + +const fixture = /** @type {(arg: string | TemplateResult) => Promise} */ ( + _fixture +); +const fixtureSync = /** @type {(arg: string | TemplateResult) => LionInputTelDropdown} */ ( + _fixtureSync +); + +/** + * @param {DropdownElement} dropdownEl + * @returns {string} + */ +function getDropdownValue(dropdownEl) { + if ('modelValue' in dropdownEl) { + return dropdownEl.modelValue; + } + return dropdownEl.value; +} + +/** + * @param {DropdownElement} dropdownEl + * @param {string} value + */ +function mimicUserChangingDropdown(dropdownEl, value) { + if ('modelValue' in dropdownEl) { + // eslint-disable-next-line no-param-reassign + dropdownEl.modelValue = value; + dropdownEl.dispatchEvent( + new CustomEvent('model-value-changed', { detail: { isTriggeredByUser: true } }), + ); + } else { + // eslint-disable-next-line no-param-reassign + dropdownEl.value = value; + dropdownEl.dispatchEvent(new Event('change')); + } +} + +/** + * @param {{ klass:LionInputTelDropdown }} config + */ +// @ts-ignore +export function runInputTelDropdownSuite({ klass = LionInputTelDropdown } = {}) { + // @ts-ignore + const tagName = defineCE(/** @type {* & HTMLElement} */ (class extends klass {})); + const tag = unsafeStatic(tagName); + + describe('LionInputTelDropdown', () => { + beforeEach(async () => { + // Wait till PhoneUtilManager has been loaded + await PhoneUtilManager.loadComplete; + }); + + describe('Dropdown display', () => { + it('calls `templates.dropdown` with TemplateDataForDropdownInputTel object', async () => { + const el = fixtureSync(html` <${tag} + .modelValue="${'+31612345678'}" + .allowedRegions="${['NL', 'PH']}" + .preferredRegions="${['PH']}" + > `); + const spy = sinon.spy( + /** @type {typeof LionInputTelDropdown} */ (el.constructor).templates, + 'dropdown', + ); + await el.updateComplete; + const dropdownNode = el.refs.dropdown.value; + const templateDataForDropdown = /** @type {TemplateDataForDropdownInputTel} */ ( + spy.args[0][0] + ); + expect(templateDataForDropdown).to.eql( + /** @type {TemplateDataForDropdownInputTel} */ ({ + data: { + activeRegion: 'NL', + regionMetaList: [ + { + countryCode: 31, + flagSymbol: '🇳🇱', + nameForLocale: 'Netherlands', + nameForRegion: 'Nederland', + regionCode: 'NL', + }, + ], + regionMetaListPreferred: [ + { + countryCode: 63, + flagSymbol: '🇵🇭', + nameForLocale: 'Philippines', + nameForRegion: 'Philippines', + regionCode: 'PH', + }, + ], + }, + refs: { + dropdown: { + labels: { selectCountry: 'Select country' }, + listeners: { + // @ts-expect-error [allow-protected] + change: el._onDropdownValueChange, + // @ts-expect-error [allow-protected] + 'model-value-changed': el._onDropdownValueChange, + }, + props: { style: 'height: 100%;' }, + ref: { value: dropdownNode }, + }, + }, + }), + ); + }); + + it('syncs dropdown value initially from activeRegion', async () => { + const el = await fixture(html` <${tag} .allowedRegions="${['DE']}"> `); + expect(getDropdownValue(/** @type {DropdownElement} */ (el.refs.dropdown.value))).to.equal( + 'DE', + ); + }); + + it('renders to prefix slot in light dom', async () => { + const el = await fixture(html` <${tag} .allowedRegions="${['DE']}"> `); + const prefixSlot = /** @type {HTMLElement} */ ( + /** @type {HTMLElement} */ (el.refs.dropdown.value).parentElement + ); + expect(prefixSlot.getAttribute('slot')).to.equal('prefix'); + expect(prefixSlot.slot).to.equal('prefix'); + expect(prefixSlot.parentElement).to.equal(el); + }); + + it('rerenders light dom when PhoneUtil loaded', async () => { + const { resolveLoaded } = mockPhoneUtilManager(); + const el = await fixture(html` <${tag} .allowedRegions="${['DE']}"> `); + // @ts-ignore + const spy = sinon.spy(el, '_scheduleLightDomRender'); + resolveLoaded(undefined); + await aTimeout(0); + expect(spy).to.have.been.calledOnce; + restorePhoneUtilManager(); + }); + }); + + describe('On dropdown value change', () => { + it('changes the currently active country code in the textbox', async () => { + const el = await fixture( + html` <${tag} .allowedRegions="${[ + 'NL', + 'BE', + ]}" .modelValue="${'+31612345678'}"> `, + ); + // @ts-ignore + mimicUserChangingDropdown(el.refs.dropdown.value, 'BE'); + await el.updateComplete; + expect(el.activeRegion).to.equal('BE'); + expect(el.modelValue).to.equal('+32612345678'); + await el.updateComplete; + expect(el.value).to.equal('+32612345678'); + }); + + it('focuses the textbox right after selection', async () => { + const el = await fixture( + html` <${tag} .allowedRegions="${[ + 'NL', + 'BE', + ]}" .modelValue="${'+31612345678'}"> `, + ); + // @ts-ignore + mimicUserChangingDropdown(el.refs.dropdown.value, 'BE'); + await el.updateComplete; + // @ts-expect-error + expect(el._inputNode).to.equal(document.activeElement); + }); + + it('prefills country code when text box is empty', async () => { + const el = await fixture(html` <${tag} .allowedRegions="${['NL', 'BE']}"> `); + // @ts-ignore + mimicUserChangingDropdown(el.refs.dropdown.value, 'BE'); + await el.updateComplete; + await el.updateComplete; + expect(el.value).to.equal('+32'); + }); + }); + + describe('On activeRegion change', () => { + it('updates dropdown value ', async () => { + const el = await fixture(html` <${tag} .modelValue="${'+31612345678'}"> `); + expect(el.activeRegion).to.equal('NL'); + // @ts-expect-error [allow protected] + el._setActiveRegion('BE'); + await el.updateComplete; + expect(getDropdownValue(/** @type {DropdownElement} */ (el.refs.dropdown.value))).to.equal( + 'BE', + ); + }); + }); + + describe('When refs.dropdown is a FormControl (LionSelectRich/LionCombobox)', () => { + it('updates dropdown value ', async () => { + const el = await fixture(html` <${tag} .modelValue="${'+31612345678'}"> `); + expect(el.activeRegion).to.equal('NL'); + // @ts-expect-error [allow protected] + el._setActiveRegion('BE'); + await el.updateComplete; + expect(getDropdownValue(/** @type {DropdownElement} */ (el.refs.dropdown.value))).to.equal( + 'BE', + ); + }); + }); + }); +} diff --git a/packages/input-tel-dropdown/test/LionInputTelDropdown.test.js b/packages/input-tel-dropdown/test/LionInputTelDropdown.test.js new file mode 100644 index 000000000..f6e1768ea --- /dev/null +++ b/packages/input-tel-dropdown/test/LionInputTelDropdown.test.js @@ -0,0 +1,49 @@ +import { runInputTelSuite } from '@lion/input-tel/test-suites'; +// @ts-ignore +import { ref, repeat, html } from '@lion/core'; +import '@lion/select-rich/define'; +import { LionInputTelDropdown } from '../src/LionInputTelDropdown.js'; +import { runInputTelDropdownSuite } from '../test-suites/LionInputTelDropdown.suite.js'; + +/** + * @typedef {import('@lion/core').TemplateResult} TemplateResult + * @typedef {HTMLSelectElement|HTMLElement & {modelValue:string}} DropdownElement + * @typedef {import('../types').TemplateDataForDropdownInputTel} TemplateDataForDropdownInputTel + * @typedef {import('../types').RegionMeta} RegionMeta + */ + +class WithFormControlInputTelDropdown extends LionInputTelDropdown { + static templates = { + ...(super.templates || {}), + /** + * @param {TemplateDataForDropdownInputTel} templateDataForDropdown + */ + dropdown: templateDataForDropdown => { + const { refs, data } = templateDataForDropdown; + // TODO: once spread directive available, use it per ref (like ref(refs?.dropdown?.ref)) + return html` + + ${repeat( + data.regionMetaList, + regionMeta => regionMeta.regionCode, + regionMeta => + html` `, + )} + + `; + }, + }; +} + +// @ts-expect-error +runInputTelSuite({ klass: LionInputTelDropdown }); +runInputTelDropdownSuite(); +// @ts-expect-error +// Runs it for LionSelectRich, which uses .modelValue/@model-value-changed instead of .value/@change +runInputTelDropdownSuite({ klass: WithFormControlInputTelDropdown }); diff --git a/packages/input-tel-dropdown/types/index.d.ts b/packages/input-tel-dropdown/types/index.d.ts new file mode 100644 index 000000000..18f4fd483 --- /dev/null +++ b/packages/input-tel-dropdown/types/index.d.ts @@ -0,0 +1,44 @@ +import { RegionCode } from '@lion/input-tel/types/types'; +import { LionSelectRich } from '@lion/select-rich'; +import { LionCombobox } from '@lion/combobox'; + +type RefTemplateData = { + ref?: { value?: HTMLElement }; + props?: { [key: string]: any }; + listeners?: { [key: string]: any }; + labels?: { [key: string]: any }; +}; + +export type RegionMeta = { + countryCode: number; + regionCode: RegionCode; + nameForRegion: string; + nameForLocale: string; + flagSymbol: string; +}; + +export type OnDropdownChangeEvent = Event & { + target: { value?: string; modelValue?: string; _overlayCtrl?: OverlayController }; + detail?: { initialize: boolean }; +}; + +export type DropdownRef = { value: HTMLSelectElement | LionSelectRich | LionCombobox | undefined }; + +export type TemplateDataForDropdownInputTel = { + refs: { + dropdown: RefTemplateData & { + ref: DropdownRef; + props: { style: string }; + listeners: { + change: (event: OnDropdownChangeEvent) => void; + 'model-value-changed': (event: OnDropdownChangeEvent) => void; + }; + labels: { selectCountry: string }; + }; + }; + data: { + activeRegion: string | undefined; + regionMetaList: RegionMeta[]; + regionMetaListPreferred: RegionMeta[]; + }; +}; From d0bcfc08e76c8f2ddf462a0a8289af74cc85c667 Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Tue, 15 Mar 2022 23:28:33 +0100 Subject: [PATCH 14/19] chore: add input-tel to umbrella forms --- docs/docs/systems/form/features.md | 2 ++ packages/form-integrations/test/dialog-integrations.test.js | 1 + packages/form-integrations/test/form-group-methods.test.js | 1 + packages/form-integrations/test/form-integrations.test.js | 3 +++ packages/form-integrations/test/helpers/umbrella-form.js | 2 ++ 5 files changed, 9 insertions(+) diff --git a/docs/docs/systems/form/features.md b/docs/docs/systems/form/features.md index e41422ebd..7f1fa38c1 100644 --- a/docs/docs/systems/form/features.md +++ b/docs/docs/systems/form/features.md @@ -14,6 +14,7 @@ import '@lion/input-amount/define'; import '@lion/input-date/define'; import '@lion/input-datepicker/define'; import '@lion/input-email/define'; +import '@lion/input-tel/define'; import '@lion/input-iban/define'; import '@lion/input-range/define'; import '@lion/input-stepper/define'; @@ -70,6 +71,7 @@ export const main = () => { + { 'lion-input-amount', 'lion-input-iban', 'lion-input-email', + 'lion-input-tel', 'lion-checkbox-group', ' lion-checkbox', ' lion-checkbox', diff --git a/packages/form-integrations/test/form-group-methods.test.js b/packages/form-integrations/test/form-group-methods.test.js index 72ba719c5..8b42c5643 100644 --- a/packages/form-integrations/test/form-group-methods.test.js +++ b/packages/form-integrations/test/form-group-methods.test.js @@ -159,6 +159,7 @@ describe(`Submitting/Resetting/Clearing Form`, async () => { }, range: '', rsvp: '', + tel: '', terms: [], comments: '', }); diff --git a/packages/form-integrations/test/form-integrations.test.js b/packages/form-integrations/test/form-integrations.test.js index 8737532a4..de94eb44b 100644 --- a/packages/form-integrations/test/form-integrations.test.js +++ b/packages/form-integrations/test/form-integrations.test.js @@ -32,6 +32,7 @@ describe('Form Integrations', () => { terms: [], notifications: { value: '', checked: false }, rsvp: '', + tel: '', comments: '', }); }); @@ -59,6 +60,7 @@ describe('Form Integrations', () => { terms: [], notifications: '', rsvp: '', + tel: '', comments: '', }); }); @@ -112,6 +114,7 @@ describe('Form Integrations', () => { 'lion-input-amount', 'lion-input-iban', 'lion-input-email', + 'lion-input-tel', 'lion-checkbox-group', ' lion-checkbox', ' lion-checkbox', diff --git a/packages/form-integrations/test/helpers/umbrella-form.js b/packages/form-integrations/test/helpers/umbrella-form.js index f2629e23b..d09903c3d 100644 --- a/packages/form-integrations/test/helpers/umbrella-form.js +++ b/packages/form-integrations/test/helpers/umbrella-form.js @@ -8,6 +8,7 @@ import '@lion/input-datepicker/define'; import '@lion/input-amount/define'; import '@lion/input-iban/define'; import '@lion/input-email/define'; +import '@lion/input-tel/define'; import '@lion/checkbox-group/define'; import '@lion/radio-group/define'; import '@lion/select/define'; @@ -71,6 +72,7 @@ export class UmbrellaForm extends LitElement { + Date: Tue, 15 Mar 2022 23:30:13 +0100 Subject: [PATCH 15/19] fix(core): fix specificity ScopedStylesController --- packages/core/src/ScopedStylesController.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/core/src/ScopedStylesController.js b/packages/core/src/ScopedStylesController.js index 6e9ff7790..d746263ac 100644 --- a/packages/core/src/ScopedStylesController.js +++ b/packages/core/src/ScopedStylesController.js @@ -35,10 +35,14 @@ export class ScopedStylesController { } __setupStyleTag() { + // Make it win from other elements on the page. + // TODO: consider adding an id here to always win, since we are simulating shadow dom + // behavior here. + const highSpecifictyScope = `${this.scopedClass}.${this.scopedClass}`; this.__styleTag.textContent = /** @type {typeof ScopedStylesController} */ ( this.host.constructor ) - .scopedStyles(unsafeCSS(this.scopedClass)) + .scopedStyles(unsafeCSS(highSpecifictyScope)) .toString(); this.host.insertBefore(this.__styleTag, this.host.childNodes[0]); } From 938bdbd2dc65912edee6c2e4c908c2e81d205790 Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Wed, 16 Mar 2022 00:16:08 +0100 Subject: [PATCH 16/19] chore: fix types --- .../form-core/test/validate/Validator.test.js | 19 +++++++++++-------- .../test/form-validation-integrations.test.js | 2 +- packages/input-amount/src/LionInputAmount.js | 13 ++++++++++--- packages/input-iban/src/validators.js | 6 +++--- packages/input-tel/src/parsers.js | 2 +- .../src/loadDefaultFeedbackMessages.js | 2 +- 6 files changed, 27 insertions(+), 17 deletions(-) diff --git a/packages/form-core/test/validate/Validator.test.js b/packages/form-core/test/validate/Validator.test.js index b24abc89c..787c074fc 100644 --- a/packages/form-core/test/validate/Validator.test.js +++ b/packages/form-core/test/validate/Validator.test.js @@ -48,7 +48,7 @@ describe('Validator', () => { it('throws when executing a Validator without a name', async () => { class MyValidator extends Validator {} expect(() => { - new MyValidator().execute(); + new MyValidator().execute(undefined); }).to.throw( 'A validator needs to have a name! Please set it via "static get validatorName() { return \'IsCat\'; }"', ); @@ -61,7 +61,10 @@ describe('Validator', () => { } } - const vali = new MyValidator({}, { getMessage: 'This is the custom error message' }); + const vali = new MyValidator( + {}, + { getMessage: async () => 'This is the custom error message' }, + ); const { getMessage } = getProtectedMembers(vali); await expectThrowsAsync( @@ -76,8 +79,8 @@ describe('Validator', () => { }); it('receives a config object (optionally) as a second argument on instantiation', async () => { - const vali = new Validator('myParam', { my: 'config' }); - expect(vali.config).to.eql({ my: 'config' }); + const vali = new Validator('myParam', { fieldName: 'X' }); + expect(vali.config).to.eql({ fieldName: 'X' }); }); it('has access to name, type, params, config in getMessage provided by config', () => { @@ -87,7 +90,7 @@ describe('Validator', () => { return 'MyValidator'; } } - const vali = new MyValidator('myParam', { my: 'config', getMessage: configSpy }); + const vali = new MyValidator('myParam', { fieldName: 'X', getMessage: configSpy }); const { getMessage } = getProtectedMembers(vali); getMessage(); @@ -114,7 +117,7 @@ describe('Validator', () => { return ''; } } - const vali = new MyValidator('myParam', { my: 'config' }); + const vali = new MyValidator('myParam', { fieldName: 'X' }); const { getMessage } = getProtectedMembers(vali); getMessage(); @@ -137,12 +140,12 @@ describe('Validator', () => { }); it('fires "config-changed" event on config change', async () => { - const vali = new Validator('foo', { foo: 'bar' }); + const vali = new Validator('foo', { fieldName: 'X' }); const cb = sinon.spy(() => {}); if (vali.addEventListener) { vali.addEventListener('config-changed', cb); } - vali.config = { bar: 'foo' }; + vali.config = { fieldName: 'Y' }; expect(cb.callCount).to.equal(1); }); diff --git a/packages/form-integrations/test/form-validation-integrations.test.js b/packages/form-integrations/test/form-validation-integrations.test.js index 614523032..b9d2d6c27 100644 --- a/packages/form-integrations/test/form-validation-integrations.test.js +++ b/packages/form-integrations/test/form-validation-integrations.test.js @@ -46,7 +46,7 @@ describe('Form Validation Integrations', () => { await fixture(html` <${elTag} .validators=${[ - new Required(null, { getMessage: () => 'error' }), + new Required(null, { getMessage: async () => 'error' }), new WarnValidator(null, { getMessage: () => 'warning' }), new DefaultSuccess(), ]} diff --git a/packages/input-amount/src/LionInputAmount.js b/packages/input-amount/src/LionInputAmount.js index 93ebcff85..f7ae3274f 100644 --- a/packages/input-amount/src/LionInputAmount.js +++ b/packages/input-amount/src/LionInputAmount.js @@ -5,6 +5,11 @@ import { IsNumber } from '@lion/form-core'; import { formatAmount, formatCurrencyLabel } from './formatters.js'; import { parseAmount } from './parsers.js'; +/** + * @typedef {import('@lion/form-core/types/FormatMixinTypes').FormatOptions} FormatOptions + * @typedef {FormatOptions & {locale?:string;currency:string|undefined}} AmountFormatOptions + */ + /** * `LionInputAmount` is a class for an amount custom form element (``). * @@ -87,9 +92,10 @@ export class LionInputAmount extends LocalizeMixin(LionInput) { if (changedProperties.has('locale') && this.locale !== changedProperties.get('locale')) { if (this.locale) { - this.formatOptions.locale = this.locale; + /** @type {AmountFormatOptions} */ + (this.formatOptions).locale = this.locale; } else { - delete this.formatOptions.locale; + delete (/** @type {AmountFormatOptions} */ (this.formatOptions).locale); } this.__reformat(); } @@ -141,7 +147,8 @@ export class LionInputAmount extends LocalizeMixin(LionInput) { return; } - this.formatOptions.currency = currency || undefined; + /** @type {AmountFormatOptions} */ + (this.formatOptions).currency = currency || undefined; if (currency) { if (!this.__currencyDisplayNodeIsConnected) { this.appendChild(this.__currencyDisplayNode); diff --git a/packages/input-iban/src/validators.js b/packages/input-iban/src/validators.js index be9b09c73..5f45617d6 100644 --- a/packages/input-iban/src/validators.js +++ b/packages/input-iban/src/validators.js @@ -110,7 +110,7 @@ export class IsIBAN extends Validator { * @param {string} [data.type] * @param {Object.} [data.config] * @param {string} [data.name] - * @returns {Promise} + * @returns {Promise} */ static async getMessage(data) { await loadTranslations(); @@ -153,7 +153,7 @@ export class IsCountryIBAN extends IsIBAN { * @param {string} [data.type] * @param {Object.} [data.config] * @param {string} [data.name] - * @returns {Promise} + * @returns {Promise} */ static async getMessage(data) { await loadTranslations(); @@ -200,7 +200,7 @@ export class IsNotCountryIBAN extends IsIBAN { * @param {string} [data.type] * @param {Object.} [data.config] * @param {string} [data.name] - * @returns {Promise} + * @returns {Promise} */ static async getMessage(data) { await loadTranslations(); diff --git a/packages/input-tel/src/parsers.js b/packages/input-tel/src/parsers.js index bd5256bf8..48c873e4f 100644 --- a/packages/input-tel/src/parsers.js +++ b/packages/input-tel/src/parsers.js @@ -2,7 +2,7 @@ import { PhoneUtilManager } from './PhoneUtilManager.js'; /** * @typedef {import('../types').RegionCode} RegionCode - * @typedef {* & import('awesome-phonenumber').default} PhoneNumber + * @typedef {* & import('@lion/input-tel/lib/awesome-phonenumber-esm').default} PhoneNumber */ /** diff --git a/packages/validate-messages/src/loadDefaultFeedbackMessages.js b/packages/validate-messages/src/loadDefaultFeedbackMessages.js index 083b74ea5..ae9ca70d5 100644 --- a/packages/validate-messages/src/loadDefaultFeedbackMessages.js +++ b/packages/validate-messages/src/loadDefaultFeedbackMessages.js @@ -120,7 +120,7 @@ export function loadDefaultFeedbackMessages() { /** * @param {MessageData} data - * @returns {Promise} + * @returns {Promise} */ const getLocalizedMessage = async data => { await forMessagesToBeReady(); From c34aef82a2798e8f85e87e9c40ccd7f175beac8c Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Wed, 16 Mar 2022 10:00:42 +0100 Subject: [PATCH 17/19] chore: add .history to .gitignore --- .prettierignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.prettierignore b/.prettierignore index 63ecf735b..413900c14 100644 --- a/.prettierignore +++ b/.prettierignore @@ -3,3 +3,4 @@ CHANGELOG.md bundlesize/ _site _site-dev +.history \ No newline at end of file From 9434a2fae7bb1406f5eef18223a6a16126b2363b Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Wed, 16 Mar 2022 12:23:53 +0100 Subject: [PATCH 18/19] chore: improve custom Field tutorial --- docs/guides/how-to/create-a-custom-field.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/guides/how-to/create-a-custom-field.md b/docs/guides/how-to/create-a-custom-field.md index 671f819b7..f719fdec0 100644 --- a/docs/guides/how-to/create-a-custom-field.md +++ b/docs/guides/how-to/create-a-custom-field.md @@ -141,6 +141,12 @@ Then we follow the steps below: the glue to integrate all other functionality like parsing/formatting/serializing, validating, tracking interaction states etc. +> N.B. Make sure you never override other property getters than the one mentioned in this tutorial, +> because those properties will loose their reactivity (they won't be considered anymore in the +> update loop of LitElement). +> Whenever a .modelValue/.formattedValue/.serializedValue needs to be computed, use +> [parser/formatter/serializer](../../docs/systems/form/formatting-and-parsing.md) + Implement with the following code: ```js preview-story @@ -165,6 +171,7 @@ export const createAField = () => { } get value() { + // Remember we should always return type 'string' here return this._inputNode.value; } @@ -183,6 +190,9 @@ export const createAField = () => { ``` That was all! +Now that your .modelValue is connected your component is fully compatible with our form system + +> Is your `.modelValue` still undefined? Please make sure you're `.value` is of type 'string'. Now you can enhance your slider by writing custom Validators for it or by writing a parser to get a custom modelValue type. From b45f340abafb38025b4e5887503f489f49fb57b8 Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Wed, 16 Mar 2022 12:37:02 +0100 Subject: [PATCH 19/19] chore: fix tests --- .prettierignore | 2 +- packages/form-core/src/FormatMixin.js | 11 ++++++++++- packages/form-core/test/validate/Validator.test.js | 10 ++++------ packages/input-tel-dropdown/package.json | 1 - .../test-suites/LionInputTelDropdown.suite.js | 13 ------------- .../test/LionInputTelDropdown.test.js | 9 ++++++--- packages/input-tel/package.json | 1 - web-test-runner.config.mjs | 1 + 8 files changed, 22 insertions(+), 26 deletions(-) diff --git a/.prettierignore b/.prettierignore index 413900c14..bc9266d1b 100644 --- a/.prettierignore +++ b/.prettierignore @@ -3,4 +3,4 @@ CHANGELOG.md bundlesize/ _site _site-dev -.history \ No newline at end of file +.history diff --git a/packages/form-core/src/FormatMixin.js b/packages/form-core/src/FormatMixin.js index ff1d1db2d..5c6a53820 100644 --- a/packages/form-core/src/FormatMixin.js +++ b/packages/form-core/src/FormatMixin.js @@ -345,9 +345,18 @@ const FormatMixinImplementation = superclass => */ __handlePreprocessor() { const unprocessedValue = this.value; + let currentCaretIndex = this.value.length; + // Be gentle with Safari + if ( + this._inputNode && + 'selectionStart' in this._inputNode && + /** @type {HTMLInputElement} */ (this._inputNode)?.type !== 'range' + ) { + currentCaretIndex = /** @type {number} */ (this._inputNode.selectionStart); + } const preprocessedValue = this.preprocessor(this.value, { ...this.formatOptions, - currentCaretIndex: this._inputNode?.selectionStart || this.value.length, + currentCaretIndex, prevViewValue: this.__prevViewValue, }); diff --git a/packages/form-core/test/validate/Validator.test.js b/packages/form-core/test/validate/Validator.test.js index 787c074fc..48019065b 100644 --- a/packages/form-core/test/validate/Validator.test.js +++ b/packages/form-core/test/validate/Validator.test.js @@ -61,10 +61,8 @@ describe('Validator', () => { } } - const vali = new MyValidator( - {}, - { getMessage: async () => 'This is the custom error message' }, - ); + // @ts-ignore needed for test + const vali = new MyValidator({}, { getMessage: 'This is the custom error message' }); const { getMessage } = getProtectedMembers(vali); await expectThrowsAsync( @@ -98,7 +96,7 @@ describe('Validator', () => { name: 'MyValidator', type: 'error', params: 'myParam', - config: { my: 'config', getMessage: configSpy }, + config: { fieldName: 'X', getMessage: configSpy }, }); }); @@ -125,7 +123,7 @@ describe('Validator', () => { name: 'MyValidator', type: 'error', params: 'myParam', - config: { my: 'config' }, + config: { fieldName: 'X' }, }); }); diff --git a/packages/input-tel-dropdown/package.json b/packages/input-tel-dropdown/package.json index 2fa856524..1a46eb423 100644 --- a/packages/input-tel-dropdown/package.json +++ b/packages/input-tel-dropdown/package.json @@ -48,7 +48,6 @@ "access": "public" }, "customElements": "custom-elements.json", - "customElementsManifest": "custom-elements.json", "exports": { ".": "./index.js", "./define": "./define.js", diff --git a/packages/input-tel-dropdown/test-suites/LionInputTelDropdown.suite.js b/packages/input-tel-dropdown/test-suites/LionInputTelDropdown.suite.js index 661e01671..d751806ba 100644 --- a/packages/input-tel-dropdown/test-suites/LionInputTelDropdown.suite.js +++ b/packages/input-tel-dropdown/test-suites/LionInputTelDropdown.suite.js @@ -209,18 +209,5 @@ export function runInputTelDropdownSuite({ klass = LionInputTelDropdown } = {}) ); }); }); - - describe('When refs.dropdown is a FormControl (LionSelectRich/LionCombobox)', () => { - it('updates dropdown value ', async () => { - const el = await fixture(html` <${tag} .modelValue="${'+31612345678'}"> `); - expect(el.activeRegion).to.equal('NL'); - // @ts-expect-error [allow protected] - el._setActiveRegion('BE'); - await el.updateComplete; - expect(getDropdownValue(/** @type {DropdownElement} */ (el.refs.dropdown.value))).to.equal( - 'BE', - ); - }); - }); }); } diff --git a/packages/input-tel-dropdown/test/LionInputTelDropdown.test.js b/packages/input-tel-dropdown/test/LionInputTelDropdown.test.js index f6e1768ea..1e518fecd 100644 --- a/packages/input-tel-dropdown/test/LionInputTelDropdown.test.js +++ b/packages/input-tel-dropdown/test/LionInputTelDropdown.test.js @@ -44,6 +44,9 @@ class WithFormControlInputTelDropdown extends LionInputTelDropdown { // @ts-expect-error runInputTelSuite({ klass: LionInputTelDropdown }); runInputTelDropdownSuite(); -// @ts-expect-error -// Runs it for LionSelectRich, which uses .modelValue/@model-value-changed instead of .value/@change -runInputTelDropdownSuite({ klass: WithFormControlInputTelDropdown }); + +describe('WithFormControlInputTelDropdown', () => { + // @ts-expect-error + // Runs it for LionSelectRich, which uses .modelValue/@model-value-changed instead of .value/@change + runInputTelDropdownSuite({ klass: WithFormControlInputTelDropdown }); +}); diff --git a/packages/input-tel/package.json b/packages/input-tel/package.json index 0b782a65b..097ef9fbd 100644 --- a/packages/input-tel/package.json +++ b/packages/input-tel/package.json @@ -52,7 +52,6 @@ "access": "public" }, "customElements": "custom-elements.json", - "customElementsManifest": "custom-elements.json", "exports": { ".": "./index.js", "./define": "./define.js", diff --git a/web-test-runner.config.mjs b/web-test-runner.config.mjs index 08d036eab..ed769458d 100644 --- a/web-test-runner.config.mjs +++ b/web-test-runner.config.mjs @@ -6,6 +6,7 @@ const packages = fs .filter( dir => fs.statSync(`packages/${dir}`).isDirectory() && fs.existsSync(`packages/${dir}/test`), ) + // .filter(x => x.endsWith('-dropdown')) .concat( fs .readdirSync('packages/helpers')