определить код страны по заданному номеру телефона в javascript

У меня есть объект со всеми доступными кодами стран. и я хочу знать, как я могу получить код страны по заданному номеру телефона и отобразить соответствующее название страны. номер телефона будет выглядеть как 16041234567 (Канада/США +1) или, возможно, 8601012345678 (Китай +86) или номер телефона любой другой страны без плюса (+) впереди. Я просто хочу получить код страны, тогда я знаю, как отобразить имя. похоже, что код может быть от 1 до 4 цифр.


person eded    schedule 31.10.2013    source источник
comment
Я предлагаю вам сделать попытку, а затем показать нам, что вы пытались и что пошло не так. Этот вопрос SO может быть полезен.   -  person showdev    schedule 01.11.2013
comment
пробовал, не могу разобраться. вот почему я спрашиваю здесь   -  person eded    schedule 01.11.2013
comment
Жаль это слышать. Что вы пробовали? К сожалению, Вопросы, запрашивающие код, должны демонстрировать минимальное понимание решаемой проблемы. Включите попытки решения, почему они не сработали и ожидаемые результаты. Попробуйте, вам нечего терять.   -  person showdev    schedule 01.11.2013


Ответы (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++;
}

Природа кодов стран гарантирует, что первый сработавший код будет правильным. (и мы можем представить, что это должно быть правдой, телефонная компания не знает, когда вы закончите набирать номера. Они просто узнают, когда вы достигли конца действительного кода страны)

person Nathan    schedule 31.10.2013
comment
номер телефона не всегда будет 10-значным. увидеть китайский номер телефона - person eded; 01.11.2013
comment
Я исправляюсь. Эдед спасибо. Я путешествовал только по Европе, Северной и Южной Америке. Поэтому я думаю, что мой ответ не сработает в этом случае. - person Nathan; 01.11.2013
comment
Спасибо, исправлен ответ - person Nathan; 01.11.2013
comment
|| оператор должен быть изменен на &&. В противном случае цикл будет выполняться бесконечно, если country_code_obj не содержит код страны или в номере нет кода страны. - person leon karabchesvky; 10.07.2020