Как проверить, включает ли номер телефона, введенный пользователем, код страны?

Есть ли простой способ проверить, включает ли номер телефона, введенный пользователем, код страны, и проверить правильность номера? Я не использую какие-либо определенные форматы, само число должно состоять только из цифр, без ('s, -'s и т.п. Возможна ли такая проверка, не спрашивая у пользователя страну? Хитрость в том, что я хочу работать со всеми номера по всему миру.

Я думаю, это невозможно сделать с помощью регулярных выражений (немного погуглил и нашел много материала, но не для этой проблемы). Есть ли для него библиотека? Я использую питон.

Или, может быть, было бы разумнее применить формат, например. X-YYYYYYYY... где X — код страны или что-то в этом роде?


person PawelRoman    schedule 26.06.2010    source источник
comment
Добро пожаловать в Stack Overflow! Телефонные номера - это кошмар.   -  person Paul D. Waite    schedule 12.07.2010


Ответы (3)


Я изучал эту тему некоторое время. У нас огромная база данных с номерами, никто не знает, с кодом страны или нет. Общий ответ: узнать это невозможно. У нас были некоторые номера, которые были действительными номерами США без кода страны (1) и действительными номерами некоторых других стран с кодом города. Но в 99% случаев вы можете проверить, если длина номера равна 9, тогда кода страны нет. Вы должны заставлять пользователей вводить код страны.

person Andrey    schedule 26.06.2010

Вот библиотека Google для работы с телефонными номерами (на Java). Однако, поскольку Google также является магазином Python, я полагаю, что у них может быть где-то доступна версия Python, или вы можете извлечь то, что вам нужно, и перевести это.

person Andy    schedule 26.06.2010
comment
это не работает. Я ввел свой номер мобильного телефона без плюса и установил США по умолчанию. Разобрать не удалось. Так что это бесполезно. В своем ответе я привел случай, когда НЕТ определенного предположения. - person Andrey; 16.09.2010
comment
Не зная вашего номера телефона, я не могу говорить о его эффективности в вашей ситуации, но когда я ввожу свой или любой другой 10-значный номер без ведущего плюса и устанавливаю США, он анализируется правильно. Я не уверен, в чем разница. - person Andy; 22.09.2010
comment
Блестящая библиотека! Спасибо, что поделился. Вот новое расположение репозитория: github.com/googlei18n/libphonenumber. - person coder9; 30.01.2015

Число вроде 247 8000 может быть:

  • местный номер 247 8000 в неуказанном районе в неуказанной стране, возможно +1 212 247 8000
  • местный номер 8000 в коде города 247 в неуказанной стране, может быть +269 247 8000
  • местный номер 8000 в коде страны 247, как +247 8000

Без дальнейшего контекста невозможно сказать.

Символ + жизненно важен для идентификации части кода страны.

person dave singer    schedule 29.09.2011