![]() |
Модераторы: 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 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |