Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проверить номер телефона 
:(
    Опции темы
gta4kv
Дата 18.12.2011, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



добрый день.

Я тут задумался, как правильно проверить номер телефона, который ввел юзер. 
Гугл дал мне то, что я и ожидал. Кучу разных регулярок, в зависимости от георграфии пользователей.
А что делать, если страна может быть любая? Префикс странны, код города, номер телефона - все это может быть в произвольной форме разной длинны, могут по разному ставится тире (а могут и игнорироваться пользователем) и прочее.

Как быть в этом случае? Верить всему, что напишет юзер?

Сделать статичные поля? Например: пользователь выбрал Россию, вписать ему +7 без возможности изменения, и дать два поля, для кода города и телефона?



Это сообщение отредактировал(а) gta4kv - 18.12.2011, 11:26
PM MAIL   Вверх
ksnk
Дата 18.12.2011, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



на хабре недавно что-то видел по этому поводу...
http://habrahabr.ru/blogs/php/102352/

Реально проверить номер телефона можно только позвонив  smile Это требует остановленного Voip или скайп-клиента 
Или послав СМС-ку и попросив ввести отправленный код, как в банковских программах. Это тоже не очень бесплатно...



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
gta4kv
Дата 18.12.2011, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Спасибо за ссылку! То, что надо.

С отправкой смс - это понятн. Тут дело не в платности, просто на первом этапе надо проверить телефон локально, потом уже слать туда сообщения smile
PM MAIL   Вверх
Absinthe
Дата 18.12.2011, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



Цитата

Сделать статичные поля? Например: пользователь выбрал Россию, вписать ему +7 без возможности изменения, и дать два поля, для кода города и телефона?
 Ага, и регексп на email только из букв. Сарказм.


Вот кстати в тему: в Приватбанке заставили иметь телефон той же страны, как и страна банковской карты. В сапорт написал им об ошибке(ведь из разных стран - обычное явление) - меня нахрен послали smile
Из-за лени их ###менеджеров банк теряет кучу клиентов.
PM MAIL   Вверх
Gold Dragon
Дата 19.12.2011, 12:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



я бы предложил использовать маску при вводе.. HTML5 это позволяет делать. Но так как браузеры нет, то есть много способов проверки при вводе на JS

С другой стороны, я писал у себя подобную функцию (правда по России) где в зависимости от региона определялось сколько цифр в коде города, потом удалялось всё из строки кроме цифр, проверялось их количество и в чистом виде писалось в базу. А вот при выводе я уже приводил их в тот формат который мне нужен.. +7(ххх)ххх-хх-хх или +7(хххх)ххх-ххх или 8 ххх ххх ххххх ......


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
krundetz
Дата 19.12.2011, 12:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



Цитата(gta4kv @  18.12.2011,  11:25 Найти цитируемый пост)
Сделать статичные поля? Например: пользователь выбрал Россию, вписать ему +7 без возможности изменения, и дать два поля, для кода города и телефона?

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

Лучше сделать форму ввода с тремя полями:

Первое поле для кода страны. Можно сделать выпадающим списком с дублированием названия страны, например +7 (Россия). Вариантов не очень много.

Второе поле для кода города (региона, поселка).

Третье поле для самого телефона.

Дальше чистим от лишних пробелов и тире и проверяем на количество символов, а также на соответствие этих символов числам.

Это сообщение отредактировал(а) krundetz - 20.12.2011, 11:02


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Gold Dragon
Дата 20.12.2011, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Цитата(krundetz @  19.12.2011,  13:23 Найти цитируемый пост)
Второе поле для кода города (региона, поселка).
Третье поле для самого телефона.
Не соглашусь smile  просто сам с этим столкнулся и было очень неудобно.. Представь ситуацию когда в городе стали не пятизначные номера, а шести.. И придётся менять и код города и номера телефонов.. Так что номер должен храниться в одном поле. А уж при выводе определять что код, а что телефон. Проще правило поменять чем данные в базе



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
krundetz
Дата 20.12.2011, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



Цитата(Gold Dragon @  20.12.2011,  10:54 Найти цитируемый пост)
Проще правило поменять чем данные в базе

я про данные в базе вообще ничего не говорил, если вопрос в ней то там лучше хранить телефон в как в чистом виде, тоесть пришедшие данные конкатенировать в одну строку вида +78311234567, так и по отдельности данные о коде страны, коде города и собственно телефоне

Чтобы в дальнейшем избежать проблем с размером полей в БД, следует просто посмотреть максимальные размеры которые возможны у кода стран, кода города и номера телефона, там все стандартизировано.

P.S. Перечитал свой предыдущей пост, заметил неоднозначность, внес необходимые правки. Gold Dragon спасибо.

Это сообщение отредактировал(а) krundetz - 20.12.2011, 11:13


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Gold Dragon
Дата 20.12.2011, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



с кодом страны тоже не всё так однозначно.. смотря от куда звонить.. smile где нужно плюс, где нужно ноль


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
krundetz
Дата 20.12.2011, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



Gold Dragon, если я правильно помню вызов через 0 это выход на междугороднию станцию и к самой нумерации не имеет отношения, в России, для этого используется 8
вот статья на эту тему про стандарты нумерации
т.е.
Цитата(Gold Dragon @  20.12.2011,  11:28 Найти цитируемый пост)
где нужно плюс, где нужно ноль 

имеет отношение только к тому как вызывать абонента при звонке ему, и в случае сервиса размешенного в единой географической точке меняться не будет

Это сообщение отредактировал(а) krundetz - 20.12.2011, 11:57


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Gold Dragon
Дата 20.12.2011, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Я про то что нужно хранить номер телефона и код страны отдельно.. а не +7980хххх... smile


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
krundetz
Дата 20.12.2011, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



Цитата(Gold Dragon @  20.12.2011,  11:58 Найти цитируемый пост)
Я про то что нужно хранить номер телефона и код страны отдельно.. а не +7980хххх...

не совсем, там просто не будет +(это уже моя неточность), так как вызов будет осуществятся либо:
+7980xxxx...
либо:
81049xxx... (если мы звоним из России в Германию, если бы в Германии код выхода на междугородную линию был бы как в Росии, то номер набирался бы так 8107980xxxx...)
либо:
0790xxx...
точнее не вызов, а передача номера абонента для автоматического вызова, а вот уже код выхода на междугороднию станцию лучше вынести в настройки системы.

Это сообщение отредактировал(а) krundetz - 20.12.2011, 12:49


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Gold Dragon
Дата 20.12.2011, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



В общем увлеклись от вопроса smile

в общем суть простая.. Если это Россия, то мы точно знаем что в России 10-значные номера. И телефон это код + местный номер

При вводе данных проверяем простой регуляркой что введены только цифры и что их только 10. Или же удаляем из введённой строки всё кроме цифр (хотя регулярка одна для этого нужна).
И далее если их не 10 то возвращаем пользователю предупреждение, если 10 то записываем в базу. Кстати, если при вводе стоит какой-либо валидатор на JS, всё равно проверяем на сервере.
Ну а при выводе в зависимости  от региона выводим, например так
для Москвы
Код

$result = "8(" . substr($tel, 0, 3) . ")" . substr($tel, 3, 3) . "-" . substr($tel, 6, 2) . "-" . substr($tel, 8, 2);

для Тамбова
Код

$result = "8(" . substr($tel, 0, 4) . ")" . substr($tel, 4, 3) . "-" . substr($tel, 7, 3);

для Мичуринска
Код

$result = "8(" . substr($tel, 0, 5) . ")" . substr($tel, 5, 2) . "-" . substr($tel, 7, 3);

Можно конечно извратиться и сжать данные в качестве экономии места, а то одна цифра - один байт может показаться расточительным.. ну это уже дело третье


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
$дмитрий
Дата 20.12.2011, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 19.6.2004

Репутация: 17
Всего: 45



Цитата

Если это Россия, то мы точно знаем что в России 10-значные номера

Откуда такая информация?
PM MAIL   Вверх
krundetz
Дата 20.12.2011, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



Цитата($дмитрий @  20.12.2011,  13:59 Найти цитируемый пост)
Откуда такая информация? 

я ссылку давал выше, там вроде есть


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0976 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.