@bookreevdenis

Телефон в качестве логина — как порешать?

Решил я без лишних полей обойтись и заюзать в качестве логина - номер телефона, т.к. он обязателен.
И логично: нет лишнего поля, сам логин нигде не светится, пользователь его точно знает и запомнить останется только пароль, почту требовать - такое себе (взять, к примеру сайт доставки пиццы - кто захочет забивать e-mail, когда хочет есть? это же маразм. Моя ситуация примерно похожа - в жизнь ресурс не заваливается, флуд/спам/рассылки рассылаться не будут, пользоваться ресурсом юзер будет не часто - пару раз в месяц, при всем при этом личный кабинет нужен)

Но проблема в том, как работать с этим логином-телефоном?
Расписывают его все по-разному, соответственно ограничивать ввод, ставить маски - тупо.

Есть вариант обработки номера в js/php, чтобы в БД пихать сразу только цифры, а при регистрации так же унифицировать номер, но тут проблемес в +7/8 (и других таких случаях в других странах). Т.е. логика обработки номера утолщается и можно где-то что-то пропустить для какой-либо страны.

Если оставить как есть - зарегистрировался юзер под 89210754591, а зайти пытается под +7(921)0754591.

Я склоняюсь ко второму варианту, т.к. он ориентирован на юзера. Но как обрабатывать все эти разные номера, с разным кол-вом цифр, разным началом и т.д.
Если паренек из РФ, то можно посчитать кол-во символов, первую цифру и на паре условий уже выдавать унифицированный логин.
А если из другой страны? Сколько логики придется описать и сколько всего изучить - кек!
  • Вопрос задан
  • 1098 просмотров
Пригласить эксперта
Ответы на вопрос 4
@bkosun
Пользователь должен указывать телефон в международном формате, Вам достаточно просто удалять все лишние символы при регистрации/авторизации, а проверять телефон можно так (все страны):

function phone_number($phone)
    {
        return (bool)preg_match("/^\+?([87](?!95[4-79]|99[08]|907|94[^0]|336|986)([348]\d|9[0-6789]|7[0247])\d{8}|[1246]\d{9,13}|68\d{7}|5[1-46-9]\d{8,12}|55[1-9]\d{9}|55[12]19\d{8}|500[56]\d{4}|5016\d{6}|5068\d{7}|502[45]\d{7}|5037\d{7}|50[4567]\d{8}|50855\d{4}|509[34]\d{7}|376\d{6}|855\d{8}|856\d{10}|85[0-4789]\d{8,10}|8[68]\d{10,11}|8[14]\d{10}|82\d{9,10}|852\d{8}|90\d{10}|96(0[79]|17[01]|13)\d{6}|96[23]\d{9}|964\d{10}|96(5[69]|89)\d{7}|96(65|77)\d{8}|92[023]\d{9}|91[1879]\d{9}|9[34]7\d{8}|959\d{7}|989\d{9}|97\d{8,12}|99[^4568]\d{7,11}|994\d{9}|9955\d{8}|996[57]\d{8}|9989\d{8}|380[3-79]\d{8}|381\d{9}|385\d{8,9}|375[234]\d{8}|372\d{7,8}|37[0-4]\d{8}|37[6-9]\d{7,11}|30[69]\d{9}|34[67]\d{8}|3[12359]\d{8,12}|36\d{9}|38[1679]\d{8}|382\d{8,9}|46719\d{10})$/", $phone);
    }
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
Если это не банк, а доставка пиццы, то разрешайте ввод этих пробелов, черточек, скобочек, чего угодно. Но сохраняйте только цифры.

При сравнении проверяйте варианты и с кодом страны и без, мало-ли как пользователь ввел.
Ответ написан
Комментировать
@Nc_Soft
Маску сделайте при вводе номера, а храните только цифрами
Ответ написан
Комментировать
@synapse_people
GitHub - giggsey/libphonenumber-for-php
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы