Pull to refresh

Comments 27

В приведенных примерах код страны захардкожен в маске, но что если я хочу форматировать номер телефона динамически, в зависимости от набранного кода страны? Аналогично с номером банковской карточки – он может быть произвольным от 12 до 19 цифр.

Проблема пока открытая. Сейчас мы как раз работаем над безболезненной сменой маски во время ввода. Это не так просто сделать, как нам казалось, но есть перспективные идеи.


Сейчас в собственном клиентском коде мы отслеживаем ввод через FormattedTextChangeListener и при необходимости меняем маску в форматтере. Для номеров карт работает хорошо.


По поводу переменной длины маски можно сделать так: если мы поняли что вводим номер, например, маэстро (у них как раз длина переменная), создаем соответствующую нетерминированную маску из PredefinedSlots#CARD_NUMBER_MAESTRO. А чтобы ограничить 19-ю символами — можно такую максимальную длину выставить у EditText. Для других типов карт, соответственно, создаем терминированные маски.

Для парсинга, форматирования и валидации номеров есть libphonenumber от google. Мощная штука (правда я пользовался только js версией)

Непонятные значения у вас получаются потому, что данное поле ожидает ввода месяца и года в формате ММ.ГГГГ.


33.6666 -> 09.6668 — это логичное преобразование. Парсер даты (java.text.SimpleDateFormat) догадался, что 33 месяца, это 2 года и 9 месяцев и прибавил нужные года.

Я то это понимаю, но никаких подсказок и контроля нет. Наверно туда нужен DateTimePicker — просил добавить несколько месяцев назад или хотя бы подсказку в Label.
Года три назад в Сбербанке не могли решить какой-то элементарный вопрос с моей картой в отделении — система требовала паспорт гражданина РФ с серией и номеров из цифр, а у меня был паспорт гражданина Беларуси с серией из букв. В итоге через три месяца пришлось сменить банк — обслуживающая софтварь не смогла принять тот факт, что в серии бывают не только цифры, но и буквы.

Похожая ситуация была и при поступлении в ВУЗ — десятибалльный сертификат РБ против пятибалльного российского. Невероятно умная и, наверное, очень дорогая система упорно не давала ввести больше одной цифры в поля ввода, а после нажатия кнопки «отправить» сказала, что наверное что-то здесь не так и стёрла все отметки.

Я часто отправляю корреспонденцию в Европу — и некоторым российским роботам сложно принять тот факт, что в Польше, например, в индексе пять цифр и дефис. А польские роботы упорно пытаются вставить дефис туда, где он совсем-совсем не нужен. Причем так себя ведут даже те роботы, которым надо бы такие вещи знать — например, польская система электронного декларирования товаров на границе.

А с номерами телефонными вообще всё сложно. Е.164 с плюсиком вообще мало кто использует для внутренних номеров — в Беларуси, например, принято звонить на мобильные через «восьмерку», в Украине — через ноль. Причем ведущий 0 префикса не нужно включать в формат е.164, а в Украине — нужно.

Поэтому на всех подобных формах, имхо, просто необходима кнопка «мне не нужна твоя помощь, робот. Уходи».
Иначе будут потерянные клиенты, недоходящая почта и единички вместо настоящего номера телефона клиентов.
У меня в паспорте серия и номер как I-AS XXXXXX
В сбербанке обслуживаюсь уже лет 7 (ещё со студенческих лет), к небольшому сожалению. Не было проблем с вводом серии и номера.
Возмоно ключевое слово здесь:
система требовала паспорт гражданина РФ с серией и номеров цифр
Тут уж вопрос к тому, кто требовал паспорт РФ, а не иностранного гражданина.

Во многих сервисах, где есть возможность указать иное гражданство обычно для РФ точный шаблон из цифр, а для всего остального просто текстовое поле, куда можно вписать что угодно.

Сначала я подумал, что делать альтернативный, минимальный plain-form, без клиентской валидации и наворотов это хорошая идея, а потом понял, что ведь робот на клиенте не пускает к серверу, который точно так же не поймет других индексов/телефонов/паспортов

Помню, были у вас проблемы в приложении с вставкой телефона из буфера — чёрти как обрезал, мешал предустановленный код города вроде. Ну и в мобильной версии сайта(с андроида) тоже шляпа полная с инпутами материализа — пришла смс на вход и ввести код почти нереально было, т.к. сбрасывался вечно фокус на плейсхолдер

Проверьте на актуальной версии приложения.

Вот на прошлой неделе у меня знакомый где-то в европах не мог привязать интернет банк(банк неизвестен мне) к местной симке именно из за +7 захардкоженой. Он утратил РФ симку, и остался в очень неудобном положении из за этого. Хоть и имея евро симку какую-то.
Выглядит не плохо. Если решите вопрос с различным форматированием телефонных номеров в зависимости от кода страны, то будет очень полезной либой.

Если выбор страны (вместе с кодом) у вас реализован через отдельный контрол, то никаких проблем нет: юзер выбрал страну, в EditText подставилась соответствующая маска. Мы такое делали, работает.

ИМО, лучше как можно раньше перейти с ____-__-__ на \d{3}-\d{2}-\d{2} (или хотя бы {3}-{2}-{2}), чтобы потом меньше переделывать и не считать курсором подчеркивания. При том что парсер можно сразу не делать навороченым, а поддерживать только небольшую грамматику.

Лучше так: +0 (123) 456-78-90
Любая буква/цифра — плейсхолдер для соответственно буквы/цифры.

Вот убил бы всех этих горе-писателей масок в браузерах. Каждый раз, когда на сайте очередного магазина нужно ввести телефон из-под Андроидного хрома, и я вижу маску — я мысленно чертыхаюсь.
Это каждый раз новые глюки. Иногда так и не удается их победить и приходится идти до большого брата.
Ну НАХРЕНА ради сомнительной красивости жертвовать практически целой платформой?
В мобильном тинькове с этими масками без ругани ни один платеж не могу сделать.
Например, пополнить телефон: из буфера номера с 8 вставляются после +7. Если вводить руками, то на поле ввода не смотришь обычно, привычно набирая +7, но у вас после плюса 7 подставляется сразу.
С другими полями еще большие проблемы.
Например, поле даты платежки ЖКУ: привычно ввожу 10.16 нажимаю Окей — в поле вставляется 10.0016.
А почему только +7? У меня вот, номер +357, и я ваш клиент.

Decoro не ограничивает разработчика каким-то одним кодом для страны (просто из коробки маска с +7 доступна как одна из самых часто используемых).

Не стоит потакать плохим практикам использования. Многие разработчики подумают, что "так и надо" и так и будут лепить её везде. А страдают от этого прежде всего пользователи. Надо ответственней относиться к тому, что вы публикуете от имени известной компании.

Не стоит потакать плохим практикам использования. — какими плохими практиками?
Многие разработчики подумают, что «так и надо» и так и будут лепить её везде. — Ты откуда знаешь как ведут себя многие разработчики?

Практика хардкодить код страны, экономя пользователю целое одно нажатие.


Я вижу как одни и те же антипаттерны бездумно копипастятся из приложения в приложение.

UFO just landed and posted this here
UFO just landed and posted this here
meandnano, в качестве предложения: пока в поле есть неправильное значение, оно возвращает условное «false». Когда же поле полностью и правильно заполнено, оно возвращает условное «true».
А рядом находится кнопка, которая является активной/неактивной, слушая (или мы как-то слушаем) возвращаемое значение.

Или это можно каким-то более простым способом реализовать?
Sign up to leave a comment.