![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
gta4kv |
|
|||
![]() Walking around mad. ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1868 Регистрация: 25.7.2006 Репутация: 21 Всего: 91 |
добрый день.
Я тут задумался, как правильно проверить номер телефона, который ввел юзер. Гугл дал мне то, что я и ожидал. Кучу разных регулярок, в зависимости от георграфии пользователей. А что делать, если страна может быть любая? Префикс странны, код города, номер телефона - все это может быть в произвольной форме разной длинны, могут по разному ставится тире (а могут и игнорироваться пользователем) и прочее. Как быть в этом случае? Верить всему, что напишет юзер? Сделать статичные поля? Например: пользователь выбрал Россию, вписать ему +7 без возможности изменения, и дать два поля, для кода города и телефона? Это сообщение отредактировал(а) gta4kv - 18.12.2011, 11:26 |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
на хабре недавно что-то видел по этому поводу...
http://habrahabr.ru/blogs/php/102352/ Реально проверить номер телефона можно только позвонив ![]() Или послав СМС-ку и попросив ввести отправленный код, как в банковских программах. Это тоже не очень бесплатно... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
gta4kv |
|
|||
![]() Walking around mad. ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1868 Регистрация: 25.7.2006 Репутация: 21 Всего: 91 |
Спасибо за ссылку! То, что надо.
С отправкой смс - это понятн. Тут дело не в платности, просто на первом этапе надо проверить телефон локально, потом уже слать туда сообщения ![]() |
|||
|
||||
Absinthe |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 4.5.2011 Репутация: 5 Всего: 11 |
Вот кстати в тему: в Приватбанке заставили иметь телефон той же страны, как и страна банковской карты. В сапорт написал им об ошибке(ведь из разных стран - обычное явление) - меня нахрен послали ![]() Из-за лени их ###менеджеров банк теряет кучу клиентов. |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
я бы предложил использовать маску при вводе.. HTML5 это позволяет делать. Но так как браузеры нет, то есть много способов проверки при вводе на JS
С другой стороны, я писал у себя подобную функцию (правда по России) где в зависимости от региона определялось сколько цифр в коде города, потом удалялось всё из строки кроме цифр, проверялось их количество и в чистом виде писалось в базу. А вот при выводе я уже приводил их в тот формат который мне нужен.. +7(ххх)ххх-хх-хх или +7(хххх)ххх-ххх или 8 ххх ххх ххххх ...... -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
krundetz |
|
|||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
ну не все так сурово, как верно подметил Absinthe пользователь может находиться в одной стране, а добавить телефон в другой. Лучше сделать форму ввода с тремя полями: Первое поле для кода страны. Можно сделать выпадающим списком с дублированием названия страны, например +7 (Россия). Вариантов не очень много. Второе поле для кода города (региона, поселка). Третье поле для самого телефона. Дальше чистим от лишних пробелов и тире и проверяем на количество символов, а также на соответствие этих символов числам. Это сообщение отредактировал(а) krundetz - 20.12.2011, 11:02 |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
![]() -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
krundetz |
|
|||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
я про данные в базе вообще ничего не говорил, если вопрос в ней то там лучше хранить телефон в как в чистом виде, тоесть пришедшие данные конкатенировать в одну строку вида +78311234567, так и по отдельности данные о коде страны, коде города и собственно телефоне Чтобы в дальнейшем избежать проблем с размером полей в БД, следует просто посмотреть максимальные размеры которые возможны у кода стран, кода города и номера телефона, там все стандартизировано. P.S. Перечитал свой предыдущей пост, заметил неоднозначность, внес необходимые правки. Gold Dragon спасибо. Это сообщение отредактировал(а) krundetz - 20.12.2011, 11:13 |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
с кодом страны тоже не всё так однозначно.. смотря от куда звонить..
![]() -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
krundetz |
|
|||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
Gold Dragon, если я правильно помню вызов через 0 это выход на междугороднию станцию и к самой нумерации не имеет отношения, в России, для этого используется 8
вот статья на эту тему про стандарты нумерации т.е. имеет отношение только к тому как вызывать абонента при звонке ему, и в случае сервиса размешенного в единой географической точке меняться не будет Это сообщение отредактировал(а) krundetz - 20.12.2011, 11:57 |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
Я про то что нужно хранить номер телефона и код страны отдельно.. а не +7980хххх...
![]() -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
krundetz |
|
|||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
не совсем, там просто не будет +(это уже моя неточность), так как вызов будет осуществятся либо: +7980xxxx... либо: 81049xxx... (если мы звоним из России в Германию, если бы в Германии код выхода на междугородную линию был бы как в Росии, то номер набирался бы так 8107980xxxx...) либо: 0790xxx... точнее не вызов, а передача номера абонента для автоматического вызова, а вот уже код выхода на междугороднию станцию лучше вынести в настройки системы. Это сообщение отредактировал(а) krundetz - 20.12.2011, 12:49 |
|||
|
||||
Gold Dragon |
|
||||||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
В общем увлеклись от вопроса
![]() в общем суть простая.. Если это Россия, то мы точно знаем что в России 10-значные номера. И телефон это код + местный номер При вводе данных проверяем простой регуляркой что введены только цифры и что их только 10. Или же удаляем из введённой строки всё кроме цифр (хотя регулярка одна для этого нужна). И далее если их не 10 то возвращаем пользователю предупреждение, если 10 то записываем в базу. Кстати, если при вводе стоит какой-либо валидатор на JS, всё равно проверяем на сервере. Ну а при выводе в зависимости от региона выводим, например так для Москвы
для Тамбова
для Мичуринска
Можно конечно извратиться и сжать данные в качестве экономии места, а то одна цифра - один байт может показаться расточительным.. ну это уже дело третье -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
||||||
|
|||||||
$дмитрий |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1037 Регистрация: 19.6.2004 Репутация: 17 Всего: 45 |
Откуда такая информация? |
|||
|
||||
krundetz |
|
|||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
||||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
А сколько?
![]() -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Один мой номер, видимый с внешнего мира больше 10 символов, так как в конце приписывааются 3 дополнительных цифры, которые обрабатываются офисной АТС.
Правильная процедура ввода телефона, imho, должна включать в себя определитель города по Ip адресу. Номер телефона - ОДНО поле ввода. По адресу определяем код города и подставляем в placeholder в поле ввода. Таким образом, юзер сможет указывать привычный для себя - 5-6-7 значный номер, а не вспоминать мучительно код своего города. Коды городов, в том числе и международные, вероятнее всего не очень сложно нагуглить. Продвинутые юзеры, лазающие на сервер через вражеские прокси будут знать что вводить в поле номера телефона. После валидации его на сервере нужно отформатировать его в виде +[страна](код города)номер-с-дефисами и вывести юзеру для визуальеной проверки. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
ksnk, неее... тогда тебе нужно почитать статью которую привёл krundetz
Есть номера которые не зависят ни от чего.. А вот прибавление или удаление цифр - это уже проделки операторов и скорее всего из-за экономии ресурсов... то уменьшают абонентские пункты, то уплотняют системы... ![]() Добавлено через 1 минуту и 27 секунд и IP не поможет.. хотя бы потому что не всегда его можно определить точно. да и к телефону он никакого отношения не имеет ![]() -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
krundetz |
|
|||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
||||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
вот тему замутили
![]() -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
ksnk |
|
||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Ну да, чтобы не вспоминать свой собственный номер города. Он автоматически довбивается как первые буквы в поле ДО ввода номера пользователем. Если юзер хочет ввести другой номер - ничего не мешает удалить... Не совсем placeholder, правда.. Электрическая лампочка, на первый взгляд, довольно простая штука, пока не начнешь рассматривать спираль в микроскоп ![]()
И чем это мне поможет? У меня номер телефона , стоящего на столе РЕАЛЬНО 13 цифр в международном формате. Вам нужен правильно форматированный 10 значный телефон, с которым до меня не дозвонится, или телефон, по которому со мной можно связаться? ![]() -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
||||
|
|||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
так я и говорил что код страны отдельно, телефон отдельно ![]() -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
$дмитрий |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1037 Регистрация: 19.6.2004 Репутация: 17 Всего: 45 |
Пробежался по тел. базе, нашел Соловецкий поселок что в Архангельской области. У них код города семизначный, а номер трехзначный
![]() ![]() |
|||
|
||||
krundetz |
|
|||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
это если говорить про лампу накаливания, а ведь есть ещё люминесцентные и диодные, но это так лирика А по делу: ksnk, можно привести пример такого номера интересно же, скрой скажем последние 5 цифр, чтобы не палить номер целиком, ну и порядок набора интересен Это сообщение отредактировал(а) krundetz - 21.12.2011, 09:51 |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
krundetz, Бывает обычная фенечка - дополнительный номер. Городская линия входит в офисную атс. Если позволяет оборудование на городской АТС, то можно его заставить транслировать "лишние цифры" номера дальше в линию. Так получается "длинный" номер. Если оборудование не позволяет, как обычно и бывает, ждется гудок и набирается дополнительный номер вручную
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
krundetz |
|
|||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
ksnk, тогда просто предусматриваем для пользователя задать ещё и дополнительный номер
|
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
krundetz, Угу... код страны, код города, телефон и дополнительный номер. Потом еще окажется нужным пароль для домофона и условный стук в аон аппарата, чтобы он соединил
![]() Нужно не плодить множество полей, а вводить всю информацию в ОДНО поле. Как самый пристойный, imho, вариант работы с номером - нужно постараться отформатировать его с учетом представлений сервера о номере телефона - дополнить недостающие код города-страны и дорисовать красивые дефисы. Полученный результат ненавязчиво представить юзеру (всплывающее окно с результатом ajax форматирования - "Ты, %юзернайм%", действительно живешь в Вернем Кукуеве, или просто забыл проставить пару цифр? Введенная абракадабра - это кошка прошлась по клавиатуре или номер на буквенной клавиатуре телефона? и т.д.) Введенному номеру (если юзер сознательно сказал, что то что он ввел и есть номер телефона)следует ВЕРИТЬ, как бы странно он не выглядел. Мы же не собираемся продавать эти номера для рассылки спама? Так что номер нужен только для контакта с юзером в сложных случаях, то есть плохой номер - это проблема юзера. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
krundetz |
|
|||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
может ты и прав, надо а-б тестирование проводить, хотя если не хранить доп номер автонабор будет трудно проводить
а я и предлагал, чтобы в нем оставались только цифры в итоге насчет запроса подтверждения тоже как то не возражал Это сообщение отредактировал(а) krundetz - 21.12.2011, 12:15 |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
На клавиатуре телефонов (и даже на некоторых дисковых ![]() Я вот напоролся на '1300 FLOWERS'. Согласись, значительно лучше звучит, чем 1300356937 ![]() Добавлено через 4 минуты и 30 секунд Вот. вражеская служба поиска созвучий в номере телефона. Еще бы на русском найти ... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
krundetz |
|
||||||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
для запоминания, да намного лучше
насколько я понимаю это техника запоминания больших цифер, то есть по запоненой ассоциации '1300 FLOWERS', человек наберет 1300356937
в смартфонах этого уже нет |
||||||
|
|||||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Да, и так не набить и в адресной книге не прописать... Вот гады, такую фенечку закопать хотят ![]() В принципе - можно считать , что в номере только цифры и не выпендриватся... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
кстати.. народ. вы мне отличную идею подкинули!!! У себя на сайте реализую обязательно механизм буквенной альтернативы номера телефона на инглишь и на русском!!!
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
krundetz |
|
|||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
Gold Dragon, давай, возможно статья Знакомство с мнемоникой поможет. Как сделаешь кинь ссылку заценим.
|
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
вот только есть маленькая проблемка..
советские телефоны имели 1=а 2=б 3=в 4=г 5=д 6=е 7=ж 8=и 9=к 0=л современные сотовые телефоны не имеют обозначений на единице и нуле как быть? ![]() а сделать в принципе не сложно. нужен словарик и придумать какой-то очень быстрый механизм перебора-подбора -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |