- 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 не нужен.
Запашок наверное всё-таки от стандартов телефонных номеров...
Dummy00001 02.06.2016 10:54 # 0
телефонные номера разрешены до 64 цифр, плюс хез-из-еще-тех-старых-модемных-времен (я знаю: пробел (пауза), запятая (длиная пауза), тире (игнорируется), хэш (что-то там посылает)). но для мобильников можно упростить (так как они не поддерживают эту PTSN хуету) до: потенциально первый плюс, и до 64ех цифр. НО: смс можно посылать и на PTSN, не-мобильный номер (в куче стран это типа функционирует).
bakagaijin 02.06.2016 11:25 # 0
Но из-за говняного подхода к стандарту телефонных номеров всё это летит коту под хвост.
defecate-plusplus 02.06.2016 11:34 # +2
bakagaijin 02.06.2016 12:22 # 0
defecate-plusplus 02.06.2016 13:07 # 0
временно смирились с тем, что код города будет 3 символа
нет ничего идеального
bakagaijin 02.06.2016 13:14 # +1
defecate-plusplus 02.06.2016 13:25 # 0
разве что тем, кто завязан на ембер
bakagaijin 02.06.2016 13:31 # +1
Dummy00001 02.06.2016 18:42 # +4
в телекомщине эту проблему решают в лоб: конфигурируемый список стран + список мобильных операторов и/или кодов городов. я слышал что поддержка этой таблички это коллективная добровольная работа сотрудников телеком фирм. (точно не помню, но табличка и не такая уж и большая - несколько тысяч строк.)
и тут стоит подчеркнуть: эти данные не статические, они со временем меняются и их нужно апдейтить.
FYI
Dummy00001 02.06.2016 18:45 # +3
guestinho 02.06.2016 18:56 # +1
inkanus-gray 02.06.2016 19:29 # +3
Правда, если номер не в международном формате, придётся его приводить в международный. В России, например, вместо ведущей восьмёрки придётся добавить +7. Если же номер местный, расположенный в данной области, придётся ведущую двойку в коде города заменить на код области (например, номер 8-261-23456 нужно привести к 8-49661-23456, а потом к +74966123456, если абонент расположен в Московской области, где 496 — код области). Но внутриобластной номер — это подстава, потому что его нельзя привести к общероссийскому и к международному, не зная кода области, поэтому проще будет запретить вводить неглобальные номера.
Да, есть трудности, связанные с несколькими форматами международных номеров (типа +78001234567 = 8-10-7-800-1234567 = 8-800-1234567 в России или с ведущими ноликами (какими-нибудь ещё цифрами) в других странах), но обычно нормализация номера всё же проще, чем красивое форматирование со всеми скобочками и дефисами и тем более чем «интеллектуальная» валидация всех этих знаков препинания прямо в поле ввода.
Тут примерно как с е-мейлом: чтобы проверить валидность е-мейла, нужно отправить на него письмо.
defecate-plusplus 02.06.2016 19:33 # +3
по крайней мере когда я попытался так позвонить через своё мегафно на один из заведомо рабочих 8-800 номеров, мне сказали, что "неправильно набран ном что ты творишь чудовище блядь!!"
inkanus-gray 02.06.2016 19:37 # 0
defecate-plusplus 02.06.2016 19:42 # +3
подождём специалистов в тред
олсо мы тут номер телефона заюзали в т.ч. под логин (одна из возможностей)
поэтому
> выкинуть все пробелы, минусы, скобки, запятые и прочие знаки препинания, кроме ведущего плюса
и прочая нормализация очень нужна, чтобы номер телефона был реально уникальный и отличимый от юзера к юзеру
bormand 02.06.2016 20:37 # 0
Х.з. Я, помнится, в канал вышестоящего провайдера гнал все номера в международном формате, и 8-800 работало. Видимо - у кого как правила настроены.
guesto 03.06.2016 02:40 # 0
8 800 это только для российских клиентов
как бы вы сделали его бесплатным, если б он со всем мира был доступен?
defecate-plusplus 03.06.2016 02:55 # +2
прежде всего мой набранный номер попадает к моему оператору, а тот уж наверняка знает, что такое +7495, чтобы протарифицировать по местным звонкам, и что такое +7926, чтобы протарифицировать по внутрисетевым. Он же не снимает с меня, как международный звонок в РФ
так какого хера ему бы не знать про +7800 и как его тарифицировать, тем более, что 8800 он знает!
bakagaijin 02.06.2016 22:59 # +1
И я уже запарился переводить номера хостов арендованных квартир с airbnb в международный формат, по которому я смогу позвонить из роуминга. Через раз нужно гуглить, что же означают эти цифры в скобках.
bakagaijin 02.06.2016 23:04 # +1
bakagaijin 02.06.2016 23:07 # +4
inkanus-gray 02.06.2016 19:34 # 0
Плейсхолдеры, которые нельзя реализовать HTML5-атрибутом placeholder, не нужны.
bakagaijin 02.06.2016 23:01 # +1
guesto 03.06.2016 02:38 # +1
и еще календарь заюзал
а потом пользователь снес хром, и запустил IE
и весь мой HTml 5 по песде пошел
именно потому во сякиах там ASP.NETах для эоого есть конторолы
на старом, добром жопаскрипте
Soul_re@ver 03.06.2016 15:40 # +2
Ты, идиот, ещё хуй себе отрежь, а потом жалуйся, что не стоит.
guestinho 03.06.2016 15:42 # 0
inkanus-gray 03.06.2016 16:48 # +2
http://s020.radikal.ru/i721/1407/84/83f02d2b913f.jpg
inkanus-gray 02.06.2016 19:53 # +2
https://ru.wikipedia.org/wiki/Телефонный_план_нумерации
Да, это обсуждалось и в Хабрахабре, и здесь. Так, ещё один источник вореций и кобенаций.
gost 02.06.2016 20:50 # 0
3_14dar 02.06.2016 23:06 # 0
bakagaijin 02.06.2016 23:15 # +2
Конечный пользователь тупой, он не хочет что-то куда-то переводить, он хочет вбить телефон и получить фырфырфыр.
3_14dar 02.06.2016 23:18 # 0
Интернациональный номер работает везде. У нас номера с двумя нулями перестали указывать в середине двухтысячных.
bakagaijin 02.06.2016 23:22 # +1
3_14dar 02.06.2016 23:41 # 0
Хз, у нас есть. Во вконтакте тоже.
myaut 02.06.2016 23:31 # +4
А обязательно текстовый? https://i.imgur.com/Jfv6F2r.png
(там потом была эпидемия троллинга на эту тему: https://twitter.com/paulomgaspar/status/722138976480571394
)
inkanus-gray 02.06.2016 23:51 # +1
https://pbs.twimg.com/media/CgWNknfWQAEukz2.jpg
https://pbs.twimg.com/media/CgXVgG-W8AAwpV3.jpg
myaut 03.06.2016 00:30 # +1
3_14dar 03.06.2016 00:11 # 0
myaut 03.06.2016 00:31 # 0
Vindicar 03.06.2016 10:22 # +5