Auth: Fix phone number formatting, add missing countries (#1010)
This commit is contained in:
parent
d3e05d15ba
commit
6b750c7196
1
src/@types/global.d.ts
vendored
1
src/@types/global.d.ts
vendored
@ -27,6 +27,7 @@ type Country = {
|
||||
name: string;
|
||||
flag: string;
|
||||
code: string;
|
||||
phoneFormat: RegExp;
|
||||
};
|
||||
|
||||
type EmojiCategory = {
|
||||
|
||||
@ -1,197 +1,240 @@
|
||||
const DATA = `AF🇦🇫93Afghanistan
|
||||
AO🇦🇴244Angola
|
||||
AL🇦🇱355Albania
|
||||
AD🇦🇩376Andorra
|
||||
AE🇦🇪971United Arab Emirates
|
||||
// This data was received from Telegram Desktop (Telegram/Resources/numbers.txt)
|
||||
const DATA = `AF🇦🇫93Afghanistan333
|
||||
AO🇦🇴244Angola333
|
||||
AL🇦🇱355Albania234
|
||||
AD🇦🇩376Andorra222
|
||||
AE🇦🇪971United Arab Emirates234
|
||||
AI🇦🇮1264Anguilla34
|
||||
AR🇦🇷54Argentina
|
||||
AM🇦🇲374Armenia
|
||||
AG🇦🇬1268Antigua and Barbuda
|
||||
AU🇦🇺61Australia
|
||||
AM🇦🇲374Armenia233
|
||||
AG🇦🇬1268Antigua and Barbuda34
|
||||
AU🇦🇺61Australia333
|
||||
AS🇦🇸1684American Samoa34
|
||||
AT🇦🇹43Austria
|
||||
AZ🇦🇿994Azerbaijan
|
||||
BI🇧🇮257Burundi
|
||||
BE🇧🇪32Belgium
|
||||
BJ🇧🇯229Benin
|
||||
BF🇧🇫226Burkina Faso
|
||||
AW🇦🇼297Aruba34
|
||||
AZ🇦🇿994Azerbaijan2322
|
||||
BI🇧🇮257Burundi224
|
||||
BE🇧🇪32Belgium3222
|
||||
BJ🇧🇯229Benin233
|
||||
BF🇧🇫226Burkina Faso2222
|
||||
BD🇧🇩880Bangladesh
|
||||
BG🇧🇬359Bulgaria
|
||||
BH🇧🇭973Bahrain
|
||||
BS🇧🇸1242Bahamas
|
||||
BH🇧🇭973Bahrain44
|
||||
BS🇧🇸1242Bahamas34
|
||||
BA🇧🇦387Bosnia and Herzegovina
|
||||
BY🇧🇾375Belarus
|
||||
BY🇧🇾375Belarus2322
|
||||
BZ🇧🇿501Belize
|
||||
BO🇧🇴591Bolivia
|
||||
BR🇧🇷55Brazil
|
||||
BB🇧🇧1246Barbados
|
||||
BN🇧🇳673Brunei
|
||||
BO🇧🇴591Bolivia134
|
||||
BR🇧🇷55Brazil254
|
||||
BB🇧🇧1246Barbados34
|
||||
BM🇧🇲1441Bermuda34
|
||||
BN🇧🇳673Brunei34
|
||||
BQ🇧🇶599Bonaire, Sint Eustatius and Saba
|
||||
BT🇧🇹975Bhutan
|
||||
BW🇧🇼267Botswana
|
||||
CF🇨🇫236Central African Republic
|
||||
CA🇨🇦1Canada
|
||||
CH🇨🇭41Switzerland
|
||||
CL🇨🇱56Chile
|
||||
CN🇨🇳86China
|
||||
CI🇨🇮225Ivory Coast
|
||||
CM🇨🇲237Cameroon
|
||||
CD🇨🇩243DR Congo
|
||||
CG🇨🇬242Republic of the Congo
|
||||
CO🇨🇴57Colombia
|
||||
KM🇰🇲269Comoros
|
||||
CV🇨🇻238Cape Verde
|
||||
BW🇧🇼267Botswana233
|
||||
CF🇨🇫236Central African Republic2222
|
||||
CA🇨🇦1Canada334
|
||||
CH🇨🇭41Switzerland234
|
||||
CK🇨🇰682Cook Islands
|
||||
CL🇨🇱56Chile144
|
||||
CN🇨🇳86China344
|
||||
CI🇨🇮225Côte d\`Ivoire233
|
||||
CM🇨🇲237Cameroon44
|
||||
CD🇨🇩243DR Congo234
|
||||
CG🇨🇬242Republic of the Congo234
|
||||
CO🇨🇴57Colombia334
|
||||
KM🇰🇲269Comoros34
|
||||
CV🇨🇻238Cape Verde34
|
||||
CR🇨🇷506Costa Rica
|
||||
CU🇨🇺53Cuba
|
||||
CY🇨🇾357Cyprus
|
||||
CZ🇨🇿420Czechia
|
||||
DE🇩🇪49Germany
|
||||
DJ🇩🇯253Djibouti
|
||||
DM🇩🇲1767Dominica
|
||||
DK🇩🇰45Denmark
|
||||
DO🇩🇴1Dominican Republic
|
||||
DZ🇩🇿213Algeria
|
||||
CU🇨🇺53Cuba44
|
||||
CY🇨🇾357Cyprus44
|
||||
CW🇨🇼599Curaçao
|
||||
CZ🇨🇿420Czech Republic
|
||||
DE🇩🇪49Germany38
|
||||
DJ🇩🇯253Djibouti2222
|
||||
DM🇩🇲1767Dominica34
|
||||
DK🇩🇰45Denmark44
|
||||
DO🇩🇴1Dominican Republic334
|
||||
DZ🇩🇿213Algeria3222
|
||||
EC🇪🇨593Ecuador
|
||||
EG🇪🇬20Egypt
|
||||
ER🇪🇷291Eritrea
|
||||
ES🇪🇸34Spain
|
||||
EG🇪🇬20Egypt234
|
||||
ER🇪🇷291Eritrea133
|
||||
ES🇪🇸34Spain333
|
||||
EE🇪🇪372Estonia
|
||||
ET🇪🇹251Ethiopia
|
||||
ET🇪🇹251Ethiopia234
|
||||
FI🇫🇮358Finland
|
||||
FJ🇫🇯679Fiji
|
||||
FR🇫🇷33France
|
||||
FK🇫🇰500Falkland Islands
|
||||
FM🇫🇲691Micronesia
|
||||
GA🇬🇦241Gabon
|
||||
GB🇬🇧44United Kingdom
|
||||
FO🇫🇴298Faroe Islands33
|
||||
FR🇫🇷33France12222
|
||||
GA🇬🇦241Gabon1222
|
||||
GB🇬🇧44United Kingdom46
|
||||
GE🇬🇪995Georgia
|
||||
GF🇬🇫594French Guiana
|
||||
GH🇬🇭233Ghana
|
||||
GN🇬🇳224Guinea
|
||||
GM🇬🇲220Gambia
|
||||
GW🇬🇼245Guinea-Bissau
|
||||
GQ🇬🇶240Equatorial Guinea
|
||||
GR🇬🇷30Greece
|
||||
GD🇬🇩1473Grenada
|
||||
GT🇬🇹502Guatemala
|
||||
GI🇬🇮350Gibraltar44
|
||||
GL🇬🇱299Greenland33
|
||||
GN🇬🇳224Guinea333
|
||||
GM🇬🇲220Gambia34
|
||||
GP🇬🇵590Guadeloupe
|
||||
GU🇬🇺1671Guam34
|
||||
GW🇬🇼245Guinea-Bissau34
|
||||
GQ🇬🇶240Equatorial Guinea333
|
||||
GR🇬🇷30Greece244
|
||||
GD🇬🇩1473Grenada34
|
||||
GT🇬🇹502Guatemala134
|
||||
GY🇬🇾592Guyana
|
||||
HN🇭🇳504Honduras
|
||||
HK🇭🇰852Hong Kong
|
||||
HN🇭🇳504Honduras44
|
||||
HR🇭🇷385Croatia
|
||||
HT🇭🇹509Haiti
|
||||
HU🇭🇺36Hungary
|
||||
HU🇭🇺36Hungary234
|
||||
ID🇮🇩62Indonesia
|
||||
IN🇮🇳91India
|
||||
IE🇮🇪353Ireland
|
||||
IR🇮🇷98Iran
|
||||
IQ🇮🇶964Iraq
|
||||
IS🇮🇸354Iceland
|
||||
IL🇮🇱972Israel
|
||||
IT🇮🇹39Italy
|
||||
JM🇯🇲1876Jamaica
|
||||
JO🇯🇴962Jordan
|
||||
JP🇯🇵81Japan
|
||||
KZ🇰🇿7Kazakhstan
|
||||
KE🇰🇪254Kenya
|
||||
IN🇮🇳91India55
|
||||
IO🇩🇬246Diego Garcia34
|
||||
IE🇮🇪353Ireland234
|
||||
IR🇮🇷98Iran334
|
||||
IQ🇮🇶964Iraq334
|
||||
IS🇮🇸354Iceland34
|
||||
IL🇮🇱972Israel234
|
||||
IT🇮🇹39Italy334
|
||||
JM🇯🇲1876Jamaica34
|
||||
JO🇯🇴962Jordan144
|
||||
JP🇯🇵81Japan244
|
||||
KZ🇰🇿7Kazakhstan3322
|
||||
KE🇰🇪254Kenya333
|
||||
KG🇰🇬996Kyrgyzstan
|
||||
KH🇰🇭855Cambodia
|
||||
KI🇰🇮686Kiribati
|
||||
KN🇰🇳1869Saint Kitts and Nevis
|
||||
KN🇰🇳1869Saint Kitts and Nevis34
|
||||
KR🇰🇷82South Korea
|
||||
KW🇰🇼965Kuwait
|
||||
KW🇰🇼965Kuwait44
|
||||
KY🇰🇾1345Cayman Islands34
|
||||
LA🇱🇦856Laos
|
||||
LB🇱🇧961Lebanon
|
||||
LR🇱🇷231Liberia
|
||||
LY🇱🇾218Libya
|
||||
LC🇱🇨1758Saint Lucia
|
||||
LY🇱🇾218Libya234
|
||||
LC🇱🇨1758Saint Lucia34
|
||||
LI🇱🇮423Liechtenstein
|
||||
LK🇱🇰94Sri Lanka
|
||||
LS🇱🇸266Lesotho
|
||||
LT🇱🇹370Lithuania
|
||||
LK🇱🇰94Sri Lanka234
|
||||
LS🇱🇸266Lesotho233
|
||||
LT🇱🇹370Lithuania35
|
||||
LU🇱🇺352Luxembourg
|
||||
LV🇱🇻371Latvia
|
||||
MA🇲🇦212Morocco
|
||||
MC🇲🇨377Monaco
|
||||
MD🇲🇩373Moldova
|
||||
MG🇲🇬261Madagascar
|
||||
LV🇱🇻371Latvia35
|
||||
MA🇲🇦212Morocco234
|
||||
MC🇲🇨377Monaco44
|
||||
MD🇲🇩373Moldova233
|
||||
MG🇲🇬261Madagascar2232
|
||||
MP🇲🇵1670Northern Mariana Islands34
|
||||
MO🇲🇴853Macau
|
||||
MS🇲🇸1664Montserrat34
|
||||
MV🇲🇻960Maldives
|
||||
MX🇲🇽52Mexico
|
||||
MH🇲🇭692Marshall Islands
|
||||
MK🇲🇰389North Macedonia
|
||||
ML🇲🇱223Mali
|
||||
MT🇲🇹356Malta
|
||||
MK🇲🇰389Macedonia
|
||||
ML🇲🇱223Mali44
|
||||
MT🇲🇹356Malta2222
|
||||
MM🇲🇲95Myanmar
|
||||
ME🇲🇪382Montenegro
|
||||
MN🇲🇳976Mongolia
|
||||
MZ🇲🇿258Mozambique
|
||||
MR🇲🇷222Mauritania
|
||||
MZ🇲🇿258Mozambique234
|
||||
MQ🇲🇶596Martinique
|
||||
MR🇲🇷222Mauritania44
|
||||
MU🇲🇺230Mauritius
|
||||
MW🇲🇼265Malawi
|
||||
MY🇲🇾60Malaysia
|
||||
NA🇳🇦264Namibia
|
||||
NE🇳🇪227Niger
|
||||
NA🇳🇦264Namibia234
|
||||
NC🇳🇨687New Caledonia
|
||||
NE🇳🇪227Niger2222
|
||||
NF🇳🇫672Norfolk Island
|
||||
NG🇳🇬234Nigeria
|
||||
NI🇳🇮505Nicaragua
|
||||
NL🇳🇱31Netherlands
|
||||
NO🇳🇴47Norway
|
||||
NI🇳🇮505Nicaragua44
|
||||
NL🇳🇱31Netherlands12222
|
||||
NO🇳🇴47Norway44
|
||||
NP🇳🇵977Nepal
|
||||
NU🇳🇺683Niue
|
||||
NR🇳🇷674Nauru
|
||||
NZ🇳🇿64New Zealand
|
||||
OM🇴🇲968Oman
|
||||
PK🇵🇰92Pakistan
|
||||
PA🇵🇦507Panama
|
||||
PE🇵🇪51Peru
|
||||
PH🇵🇭63Philippines
|
||||
OM🇴🇲968Oman44
|
||||
PK🇵🇰92Pakistan334
|
||||
PA🇵🇦507Panama44
|
||||
PE🇵🇪51Peru333
|
||||
PF🇵🇫689French Polynesia
|
||||
PH🇵🇭63Philippines334
|
||||
PM🇵🇲508Saint Pierre and Miquelon
|
||||
PR🇵🇷1Puerto Rico334
|
||||
PS🇵🇸970Palestine324
|
||||
PW🇵🇼680Palau
|
||||
PG🇵🇬675Papua New Guinea
|
||||
PL🇵🇱48Poland
|
||||
PL🇵🇱48Poland333
|
||||
KP🇰🇵850North Korea
|
||||
PT🇵🇹351Portugal
|
||||
PY🇵🇾595Paraguay
|
||||
PT🇵🇹351Portugal144
|
||||
PY🇵🇾595Paraguay333
|
||||
QA🇶🇦974Qatar
|
||||
RO🇷🇴40Romania
|
||||
RU🇷🇺7Russia
|
||||
RW🇷🇼250Rwanda
|
||||
RE🇷🇪262Réunion333
|
||||
RO🇷🇴40Romania333
|
||||
RU🇷🇺7Russia3322
|
||||
RW🇷🇼250Rwanda333
|
||||
SA🇸🇦966Saudi Arabia
|
||||
SD🇸🇩249Sudan
|
||||
SN🇸🇳221Senegal
|
||||
SG🇸🇬65Singapore
|
||||
SD🇸🇩249Sudan234
|
||||
SN🇸🇳221Senegal234
|
||||
SG🇸🇬65Singapore44
|
||||
SH🇸🇭290Saint Helena23
|
||||
SH🇸🇭247Saint Helena4
|
||||
SB🇸🇧677Solomon Islands
|
||||
SL🇸🇱232Sierra Leone
|
||||
SV🇸🇻503El Salvador
|
||||
SM🇸🇲378San Marino
|
||||
SO🇸🇴252Somalia
|
||||
RS🇷🇸381Serbia
|
||||
SS🇸🇸211South Sudan
|
||||
ST🇸🇹239São Tomé and Príncipe
|
||||
SR🇸🇷597Suriname
|
||||
SL🇸🇱232Sierra Leone233
|
||||
SV🇸🇻503El Salvador44
|
||||
SM🇸🇲378San Marino334
|
||||
SO🇸🇴252Somalia233
|
||||
RS🇷🇸381Serbia234
|
||||
SS🇸🇸211South Sudan234
|
||||
ST🇸🇹239São Tomé and Príncipe25
|
||||
SR🇸🇷597Suriname34
|
||||
SK🇸🇰421Slovakia
|
||||
SI🇸🇮386Slovenia
|
||||
SE🇸🇪46Sweden
|
||||
SZ🇸🇿268Eswatini
|
||||
SC🇸🇨248Seychelles
|
||||
SE🇸🇪46Sweden234
|
||||
SZ🇸🇿268Swaziland44
|
||||
SC🇸🇨248Seychelles1222
|
||||
SX🇸🇽1721Sint Maarten34
|
||||
SY🇸🇾963Syria
|
||||
TD🇹🇩235Chad
|
||||
TG🇹🇬228Togo
|
||||
TH🇹🇭66Thailand
|
||||
TC🇹🇨1649Turks and Caicos Islands34
|
||||
TD🇹🇩235Chad2222
|
||||
TG🇹🇬228Togo233
|
||||
TH🇹🇭66Thailand144
|
||||
TJ🇹🇯992Tajikistan
|
||||
TM🇹🇲993Turkmenistan
|
||||
TK🇹🇰690Tokelau
|
||||
TM🇹🇲993Turkmenistan26
|
||||
TL🇹🇱670Timor-Leste
|
||||
TO🇹🇴676Tonga
|
||||
TT🇹🇹1868Trinidad and Tobago
|
||||
TN🇹🇳216Tunisia
|
||||
TR🇹🇷90Turkey
|
||||
TT🇹🇹1868Trinidad and Tobago34
|
||||
TN🇹🇳216Tunisia233
|
||||
TR🇹🇷90Turkey334
|
||||
TV🇹🇻688Tuvalu
|
||||
TZ🇹🇿255Tanzania
|
||||
UG🇺🇬256Uganda
|
||||
UA🇺🇦380Ukraine
|
||||
UY🇺🇾598Uruguay
|
||||
US🇺🇸1United States
|
||||
UZ🇺🇿998Uzbekistan
|
||||
TW🇹🇼886Taiwan
|
||||
TZ🇹🇿255Tanzania234
|
||||
UG🇺🇬256Uganda234
|
||||
UA🇺🇦380Ukraine2322
|
||||
UY🇺🇾598Uruguay44
|
||||
US🇺🇸1United States334
|
||||
UZ🇺🇿998Uzbekistan27
|
||||
VA🇻🇦3Vatican City
|
||||
VC🇻🇨1784Saint Vincent and the Grenadines
|
||||
VE🇻🇪58Venezuela
|
||||
VC🇻🇨1784Saint Vincent and the Grenadines34
|
||||
VE🇻🇪58Venezuela334
|
||||
VG🇻🇬1284British Virgin Islands34
|
||||
VI🇻🇮1340US Virgin Islands34
|
||||
VN🇻🇳84Vietnam
|
||||
VU🇻🇺678Vanuatu
|
||||
WF🇼🇫681Wallis and Futuna
|
||||
WS🇼🇸685Samoa
|
||||
YE🇾🇪967Yemen
|
||||
ZA🇿🇦27South Africa
|
||||
ZM🇿🇲260Zambia
|
||||
ZW🇿🇼263Zimbabwe`;
|
||||
XK🇽🇰383Kosovo44
|
||||
YE🇾🇪967Yemen333
|
||||
ZA🇿🇦27South Africa234
|
||||
ZM🇿🇲260Zambia234
|
||||
ZW🇿🇼263Zimbabwe234`;
|
||||
|
||||
const formatsCache: Record<string, RegExp> = {};
|
||||
export const defaultPhoneNumberFormat = /(\d{1,3})(\d{1,3})?(\d{1,3})?(\d{1,3})?(\d{1,3})?/;
|
||||
|
||||
const parsed = DATA
|
||||
.split('\n')
|
||||
@ -200,10 +243,31 @@ const parsed = DATA
|
||||
const flag = str.substr(2, 4);
|
||||
const code = `+${str.match(/\d+/)![0]}`;
|
||||
const name = str.split(/\d+/)[1];
|
||||
const format = str.match(/\d+$/);
|
||||
const phoneFormat = getPhoneNumberFormat(format);
|
||||
|
||||
return {
|
||||
id, flag, code, name,
|
||||
id, flag, code, name, phoneFormat,
|
||||
};
|
||||
});
|
||||
|
||||
function getPhoneNumberFormat(format: RegExpMatchArray | null) {
|
||||
if (!format) {
|
||||
return defaultPhoneNumberFormat;
|
||||
}
|
||||
|
||||
const formatValue = format[0] as string;
|
||||
let phoneNumberFormat;
|
||||
|
||||
if (!formatsCache[formatValue]) {
|
||||
const phoneNumberGroups = formatValue.split('').map(Number);
|
||||
phoneNumberFormat = phoneNumberGroups.reduce((result, count, i) => {
|
||||
return `${result}(\\d{1,${count}})${i > 0 ? '?' : ''}`;
|
||||
}, '');
|
||||
formatsCache[formatValue] = new RegExp(`${phoneNumberFormat}${'()?'.repeat(5 - phoneNumberGroups.length)}`);
|
||||
}
|
||||
|
||||
return formatsCache[formatValue];
|
||||
}
|
||||
|
||||
export default parsed;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import countryList from './countries';
|
||||
import countryList, { defaultPhoneNumberFormat } from './countries';
|
||||
|
||||
export function getCountryById(id: string) {
|
||||
return countryList.find((c) => c.id === id) as Country;
|
||||
@ -6,21 +6,7 @@ export function getCountryById(id: string) {
|
||||
|
||||
// Empty groups are used to preserve 5 callback arguments for `replace` method
|
||||
function getPhoneNumberFormat(country?: Country) {
|
||||
const id = country ? country.id : 'UNKNOWN';
|
||||
|
||||
switch (id) {
|
||||
case 'RU':
|
||||
case 'US':
|
||||
return /(\d{1,3})(\d{1,3})?(\d{1,2})?(\d{1,2})?()?/;
|
||||
case 'GB':
|
||||
return /(\d{1,4})(\d{1,5})?()?()?()?/;
|
||||
case 'UA':
|
||||
case 'FI':
|
||||
case 'AE':
|
||||
return /(\d{1,2})(\d{1,3})?(\d{1,2})?(\d{1,2})?()?/;
|
||||
default:
|
||||
return /(\d{1,3})(\d{1,3})?(\d{1,3})?(\d{1,3})?(\d{1,3})?/;
|
||||
}
|
||||
return country ? country.phoneFormat : defaultPhoneNumberFormat;
|
||||
}
|
||||
|
||||
export function getCountryFromPhoneNumber(input: string) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user