Как хранить и отображать номера телефонов

akxxiv

Новичок
Приветствую. Встала проблема с хранением телефонных номеров. А именно:

Телефоны могут вводиться в разных форматах:
+79211234567
+7 921 1234567
+7 (921) 1234567
8 (921) 1234567
921 1234567
123-45-67
и тд и тд

Кроме того все усугубляется тем что телефоны могут быть междугородними, а там код города может не всегда 3-х значное число, а так же еще и международными.....

Сейчас справлюсь с этим храня их в формате +7 (921) 1234567, при чем на клиенте поле типа телефон обрабатывается JavaScript-ом и из него создается 3 поля (для кода страны, города, и номера телефона). Здесь очевидные плюсы - это я точно знаю что является кодом, а что телефоном и автоматически перевожу в формат +7 (921) 1234567.
Но клиенты вопят что им не удобно 3 поля заполнять и просят ввести 1 поля для телефона. А тут возможны варианты для некорректного заполнения номеров.

Надо как-то приводить все что они написали к одному формату, думаю +79211234567, но как определить что из написаного является кодом города, что кодом страны, а что номером телефона???

И еще немаловажно - нужно при отображении номера как-то приводить его в удобочитаемый вид....

Кто как справлялся с такой задачей???
 

Redjik

Джедай-мастер
делай регулярку отсекающую ведущие +7 и 8 и храни 9-10 цифр

единственное с кодом страны запары могут быть
 

Absinthe

жожо
Проверять номер на лету и бить по пальцам джаваскриптом, если не верно.
 

akxxiv

Новичок
делай регулярку отсекающую ведущие +7 и 8 и храни 9-10 цифр

единственное с кодом страны запары могут быть
Так в том то и дела, там могут быть наприме украинские телефоны с кодом +380, а може и другие. код страны нужен.
кроме того код города тоже разный там может быть и 3 цифры и более, да и сам номер имеет разное количество цифр.

Проверять номер на лету и бить по пальцам джаваскриптом, если не верно.
Проверять на лету... А как его проверят??? Если формат-то разный Есть идеи?
 

akd

dive now, work later
Команда форума
вот, обьясните мне, возможно тупому, НАХЕР вам сдался код города?
вся европа унифицирована давно и телефон просто состоит из кода страны + номера телефона. живем так уже какие-то лет 15 и все счастливы. и когда на совкосайтах просят указать телефон с кодом города я впадаю в прострацию.
 

akxxiv

Новичок
Нормальный абсолютный это какой?
+79271234567
или
+7 9211234567

Тут еще вопрос в отображении. Как лучше читается все скопом или все-таки с разделителями????
 

akd

dive now, work later
Команда форума
читается - ок, форматируйте вывод, нахер на вводе делить на 3 поля? это же тупо тупо тупо.
 

Духовность™

Продвинутый новичок
телефонные номера нужно хранить как строку и не пытаться их подогнать под один формат. это бесполезное занятие.
 

Absinthe

жожо
Духовность™ почему не нужно? Если хранится телефон - то подразумевается его использование(контактировать с клиентом). Без валидации напишут пятизначный номер - а потом думай, как дозвониться.
 

Andkorol

Новичок
Без валидации напишут пятизначный номер - а потом думай, как дозвониться.
Если хотят, чтоб до них могли дозвониться - оставят нормальный номер.
Если не хотят - валидация не поможет, тупо введут под шаблон +7 111 2223344 - валидацию это пройдет, а толку?
 

Духовность™

Продвинутый новичок
Духовность™ почему не нужно?
потому, что валидация тел. номеров - это так же "легко", как и составить регулярное выражение для email-адреса.

http://ru.wikipedia.org/wiki/Телефонный_план_нумерации#.D0.A0.D0.BE.D1.81.D1.81.D0.B8.D1.8F_.D0.B8_.D0.9A.D0.B0.D0.B7.D0.B0.D1.85.D1.81.D1.82.D0.B0.D0.BD
http://ru.wikipedia.org/wiki/Телефонный_план_нумерации_России

Ну а что самое главное - это никому нахер не нужно. У нас на работе менеджеры тоже, шибко умные, валидацию захотели, а на след. день клиент написал, мол "вы что, дебилы, а как мне указать добавочный?".
 

С.

Продвинутый новичок
У меня есть сайт, где вводится номер телефона. При чем не просто для статистики, туда отправляется СМС. Вы не представляете сколько много народу не может правильно его ввести (это при том, что я вырезаю любые разделители). Ввести номер в местном формате, без указания страны -- уже общее место. Хотя на сайте нет никаких намеков на принадлежность к какой-либо стране "по умолчанию". А если есть код страны, то еще и втютюрят туда местный код выхода в международье, типа 00 или 810.

Есть другий проект, свазанный с конкретной страной. Там разрешаются местные номера для этой страны или любые международные номера. Ошибок ровно столько же.

Что до хранения, то однозначно хранить только цифры (даже без плюса спереди).
 

ksnk

прохожий
Зависит от того зачем нужен номер. Если для отправки sms, то у нас есть четкий формат номера с +, который должен быть получен, и клиент обязан предоставить нам номер именно в этом формате. Если это форма обратной связи, чтобы человек-оператор мог связаться с клиентом - клиент имеет право написать все, что ему хочется, так как эта информация нужна клиенту и клиент должен гарантировать ее корректность. В этом случае можно только контролировать, что номер не очень похож на стандартный номер телефона и предупреждать клиента об этом - "обратите внимание, номер выглядит странно, все равно записать?"
 

С.

Продвинутый новичок
а на след. день клиент написал, мол "вы что, дебилы, а как мне указать добавочный?".
В русском вебе вообще нездоровая тяга к валидации всего и вся, что нужно и не нужно. Помню у какого-то регистратора доменов валидировался даже почтовый адрес: <<В адресе отсутствует "г." или "пос.">>. А телефон вообще не смог ввести никак. Разозлился и СКОПИПАСТИЛ номер из ихнего же образца ввода телефона. Не прошел!
 
Сверху