Source code
Revision control
Copy as Markdown
Other Tools
/* This Source Code Form is subject to the terms of the Apache License, Version
* 2.0. If a copy of the Apache License was not distributed with this file, You
// be further maintained by our own in Form Autofill codebase.
export var PhoneNumberNormalizer = (function () {
const UNICODE_DIGITS = /[\uFF10-\uFF19\u0660-\u0669\u06F0-\u06F9]/g;
const VALID_ALPHA_PATTERN = /[a-zA-Z]/g;
const LEADING_PLUS_CHARS_PATTERN = /^[+\uFF0B]+/g;
const NON_DIALABLE_CHARS = /[^,#+\*\d]/g;
// Map letters to numbers according to the ITU E.161 standard
let E161 = {
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,
};
// Normalize a number by converting unicode numbers and symbols to their
// ASCII equivalents and removing all non-dialable characters.
function NormalizeNumber(number, numbersOnly) {
if (typeof number !== "string") {
return "";
}
number = number.replace(UNICODE_DIGITS, function (ch) {
return String.fromCharCode(48 + (ch.charCodeAt(0) & 0xf));
});
if (!numbersOnly) {
number = number.replace(VALID_ALPHA_PATTERN, function (ch) {
return String(E161[ch.toLowerCase()] || 0);
});
}
number = number.replace(LEADING_PLUS_CHARS_PATTERN, "+");
number = number.replace(NON_DIALABLE_CHARS, "");
return number;
}
return {
Normalize: NormalizeNumber,
};
})();