У меня есть объект со всеми доступными кодами стран. и я хочу знать, как я могу получить код страны по заданному номеру телефона и отобразить соответствующее название страны. номер телефона будет выглядеть как 16041234567 (Канада/США +1) или, возможно, 8601012345678 (Китай +86) или номер телефона любой другой страны без плюса (+) впереди. Я просто хочу получить код страны, тогда я знаю, как отобразить имя. похоже, что код может быть от 1 до 4 цифр.
определить код страны по заданному номеру телефона в javascript
Ответы (1)
ПЕРВЫЙ ОТВЕТ:
Просто быстрая мысль, почему бы не посчитать с другой стороны.
возьмите 10 цифр с обратной стороны номера. То, что у вас останется, будет усеченным кодом страны. из вашего примера:
num = "16041234567";
code = num.slice(0, num.length-10);
country_name = country_code_object[code];
Этот код предполагает, что ваш объект может работать с кодами переменной длины (но вы всегда можете буферизовать начало кода, если вам это нужно.
НЕИСПРАВНО: Китай не использует 10-й номер (в ячейках используется 11-й)
ИСПРАВЛЕНИЕ: после более полного изучения кодов стран я понял, что это дерево префиксов. Это означает, что для линейного времени вы можете просто проверять символ за символом
num = "16041234567";
country_code;
i = 1;
while (!country_code || i < num.length) {
country_code = country_code_obj[num.slice(0, i)];
i++;
}
Природа кодов стран гарантирует, что первый сработавший код будет правильным. (и мы можем представить, что это должно быть правдой, телефонная компания не знает, когда вы закончите набирать номера. Они просто узнают, когда вы достигли конца действительного кода страны)