- 1
$ npm install ember-cli-phone-number --save-dev
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+2
$ npm install ember-cli-phone-number --save-dev
Всё достаточно просто. Нам нужен текстовый инпут, в который пользователь вводит свой номер мобильного телефона. Предназначение: sms-оповещение. Проблема в том, что все существующие решения привязываются к определённому формату номера (US, Canada), а при использовании международного формата для US-номера выясняется, что в нём 11 цифр, а не 12. Пользователь же может иметь номер хоть в ёбаном Вануату. Текущее решение: принимать любой текст в инпут, делать .replace(/[^0-9]/g, ''), схоронять в базу и ебаться с этим потом. Чувствую запашок, но не могу понять откуда. Швабрашвабр про телефонные номера читал. inb4, js не нужен.
Запашок наверное всё-таки от стандартов телефонных номеров...
телефонные номера разрешены до 64 цифр, плюс хез-из-еще-тех-старых-модемных-времен (я знаю: пробел (пауза), запятая (длиная пауза), тире (игнорируется), хэш (что-то там посылает)). но для мобильников можно упростить (так как они не поддерживают эту PTSN хуету) до: потенциально первый плюс, и до 64ех цифр. НО: смс можно посылать и на PTSN, не-мобильный номер (в куче стран это типа функционирует).
Но из-за говняного подхода к стандарту телефонных номеров всё это летит коту под хвост.
временно смирились с тем, что код города будет 3 символа
нет ничего идеального
разве что тем, кто завязан на ембер
в телекомщине эту проблему решают в лоб: конфигурируемый список стран + список мобильных операторов и/или кодов городов. я слышал что поддержка этой таблички это коллективная добровольная работа сотрудников телеком фирм. (точно не помню, но табличка и не такая уж и большая - несколько тысяч строк.)
и тут стоит подчеркнуть: эти данные не статические, они со временем меняются и их нужно апдейтить.
FYI
Правда, если номер не в международном формате, придётся его приводить в международный. В России, например, вместо ведущей восьмёрки придётся добавить +7. Если же номер местный, расположенный в данной области, придётся ведущую двойку в коде города заменить на код области (например, номер 8-261-23456 нужно привести к 8-49661-23456, а потом к +74966123456, если абонент расположен в Московской области, где 496 — код области). Но внутриобластной номер — это подстава, потому что его нельзя привести к общероссийскому и к международному, не зная кода области, поэтому проще будет запретить вводить неглобальные номера.
Да, есть трудности, связанные с несколькими форматами международных номеров (типа +78001234567 = 8-10-7-800-1234567 = 8-800-1234567 в России или с ведущими ноликами (какими-нибудь ещё цифрами) в других странах), но обычно нормализация номера всё же проще, чем красивое форматирование со всеми скобочками и дефисами и тем более чем «интеллектуальная» валидация всех этих знаков препинания прямо в поле ввода.
Тут примерно как с е-мейлом: чтобы проверить валидность е-мейла, нужно отправить на него письмо.
по крайней мере когда я попытался так позвонить через своё мегафно на один из заведомо рабочих 8-800 номеров, мне сказали, что "неправильно набран ном что ты творишь чудовище блядь!!"
подождём специалистов в тред
олсо мы тут номер телефона заюзали в т.ч. под логин (одна из возможностей)
поэтому
> выкинуть все пробелы, минусы, скобки, запятые и прочие знаки препинания, кроме ведущего плюса
и прочая нормализация очень нужна, чтобы номер телефона был реально уникальный и отличимый от юзера к юзеру
Х.з. Я, помнится, в канал вышестоящего провайдера гнал все номера в международном формате, и 8-800 работало. Видимо - у кого как правила настроены.
8 800 это только для российских клиентов
как бы вы сделали его бесплатным, если б он со всем мира был доступен?
прежде всего мой набранный номер попадает к моему оператору, а тот уж наверняка знает, что такое +7495, чтобы протарифицировать по местным звонкам, и что такое +7926, чтобы протарифицировать по внутрисетевым. Он же не снимает с меня, как международный звонок в РФ
так какого хера ему бы не знать про +7800 и как его тарифицировать, тем более, что 8800 он знает!
И я уже запарился переводить номера хостов арендованных квартир с airbnb в международный формат, по которому я смогу позвонить из роуминга. Через раз нужно гуглить, что же означают эти цифры в скобках.
Плейсхолдеры, которые нельзя реализовать HTML5-атрибутом placeholder, не нужны.
и еще календарь заюзал
а потом пользователь снес хром, и запустил IE
и весь мой HTml 5 по песде пошел
именно потому во сякиах там ASP.NETах для эоого есть конторолы
на старом, добром жопаскрипте
Ты, идиот, ещё хуй себе отрежь, а потом жалуйся, что не стоит.
http://s020.radikal.ru/i721/1407/84/83f02d2b913f.jpg
https://ru.wikipedia.org/wiki/Телефонный_план_нумерации
Да, это обсуждалось и в Хабрахабре, и здесь. Так, ещё один источник вореций и кобенаций.
Конечный пользователь тупой, он не хочет что-то куда-то переводить, он хочет вбить телефон и получить фырфырфыр.
Интернациональный номер работает везде. У нас номера с двумя нулями перестали указывать в середине двухтысячных.
Хз, у нас есть. Во вконтакте тоже.
А обязательно текстовый? https://i.imgur.com/Jfv6F2r.png
(там потом была эпидемия троллинга на эту тему: https://twitter.com/paulomgaspar/status/722138976480571394
)
https://pbs.twimg.com/media/CgWNknfWQAEukz2.jpg
https://pbs.twimg.com/media/CgXVgG-W8AAwpV3.jpg