11.05.2021
Телефонные маски с флагом и названием стран на разных языках
Для разного рода форм я собрал все телефонные маски с флагом страны, кодом телефона, кодом страны, а также с названиями стран на разных языках.
База телефонных масок размещена в Airtable для удобства:
Комментарии
Если по этой теме у вас возник вопрос, вы можете задать его в моём Телеграм-канале. Если вопрос по теме Airtable, то на эти вопросы я отвечаю платно, условия консультации по ссылке.
Задать вопрос по теме
Теги:
-
Airtable
Другие посты…
09.10.2021
Airtable: как запретить пользователям дублировать базы?
Для этого надо зайти в настройки воркспейса и отметить галку «Restrict adding new collaborators to this workspace and its bases».
11.08.2021
Какую нагрузку может выдержать API Airtable?
Airtable разрешает обращаться к API до 5 раз в секунду — при превышении этого лимита вам, по заявлению Airtable в документации, блокируется доступ на 30 секунд.
09.08.2021
Airtable vs. Fibery
На август 2021 лучшая альтернатива Airtable — это Fibery. В этой заметке — сравнение двух систем.
09.08.2021
Прямые альтернативы/аналоги Airtable
На данный момент знаю о нескольких решениях, которые либо прямо копируют Airtable, либо работают по очень схожему принципу.
Онлайн-курс
Airtable для начинающих
Это бесплатный курс, который поможет вам разобраться с 20% возможностей Airtable для решения 80% ваших задач
Плагин дает возможность быстро создать маску для номера телефона +7(___)__-__-__, даты, номера кредитной карты и т.д.
Данная статья — перевод документации по Maskedinput на GitHub с расширеными примерами использования.
Маска определяется форматом, состоящим из литералов маски и определений маски. Любой символ, отсутствующий в списке определений ниже, считается литералом маски. Литералы маски будут автоматически вводиться для пользователя по мере их ввода и не могут быть удалены пользователем. Предопределены следующие стандартные обозначения
:
9
— любая цифра[0-9]
a
— любой символ латинского алфавита[A-Za-z]
*
— цифра или символ латинского алфавита[A-Za-z0-9]
- Дополнительно можно определить свои
Подключение файлов
Файлы, необходимые для работы плагина (Версия jQuery 1.8.3+):
<script src="https://cdn.jsdelivr.net/npm/jquery@3.2.1/dist/jquery.min.js" type="text/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/jquery.maskedinput@1.4.1/src/jquery.maskedinput.min.js" type="text/javascript"></script>
Примеры использования jQuery.Maskedinput
Обратите внимание, что во всех примерах на этом сайте подключен мини-плагин для решения проблемы с кликом по центру (см. последний раздел статьи)
Базовые примеры
Вызовите функцию mask
для тех элементов, к которым вы хотите применить маску. Никаких дополнительных вызовов функции прописывать не нужно.
-
Маска для даты
$("#date_1").mask("99/99/9999");
-
Маска номера телефона
$("#phone_1").mask("(999) 999-9999");
-
Маска для банковской варты
$("#card").mask("9999-9999-9999-9999");
Продвинутое использование плагина
Маска для ввода номера телефона
Разберем разные варианты кастомизации
Добавление +7
, или кода региона (оператора), содержищего девятки 9
-
Маска для телефона с фиксированным префиксом «+7»
$("#phone_2").mask("+7(999) 999-9999");
-
Маска для телефона с фиксированным префиксом «8»
$("#phone_3").mask("8(999) 999-9999");
-
Переопределение стандартных обозначений для указания номера с фиксированной девяткой, например код оператора
$.mask.definitions['9'] = false; $.mask.definitions['5'] = "[0-9]"; $("#phone_4").mask("8(921) 555-5555");
Отключение автозаполнения
Чтобы гарантированно отключить автозаполнение применяйте технику, описанную в моей заметке.
Дополнительная кастомизация
-
Заменить подчеркивание плэйсхолдера
_
на другой символ$("#model").mask("9999_999",{placeholder:"-"});
-
Отключить стирание при незаполненных данных
По-умолчанию, если поле ввода теряет фокус до того как будет заполненно пользостью, данные стираются. Это поведение можно отключить:
$("#product_2").mask("9999/999/99",{autoclear: false});
-
Сделать часть маски не обязательной
Вы можете иметь часть вашей маски не обязательной. Перечислено после ‘?’ внутри маски считается необязательным. Типичным примером этого является номер телефона и дополнительный добавочный номер.
$("#phone_dob").mask("8(999) 999-9999? доб.9999");
-
Переопределить стандартные обозначения
Если вам не достаточно стандартных обозначений (
9
— цифра,a
— лат. буквы,*
— цифры или лат. буквы), вы всегда можете добавить свои. Например, может быть, вам нужна маска, чтобы разрешить только шестнадцатеричные символы ([A-Fa-f0-9]
), или только+-
. Вы можете добавить свое собственное определение для заполнителя, скажем, «h». Обратите внимание, что вы можете указать любое регулярное выражение.$.mask.definitions['h'] = "[A-Fa-f0-9]"; $("#color").mask("#hhhhhh"); $.mask.definitions['~']='[+-]'; $("#eyescript").mask("~9.99 ~9.99 999");
-
Вызвать функцию после заполнения поля ввода
$.mask.definitions['h'] = "[A-Fa-f0-9]"; $("#bgcolor").mask("#hhhhhh",{ completed: function(){ this.css('background-color'+this.val()); } });
Решение проблемы с кликом по центру
Один из минусов плагина в том, что если кликнуть по центру маски, то курсор может там и остаться. Это неприятная проблема, но решается с помощью миниатюрного плагина.
jQuery-плагин для установки курсора в определенной позиции pos
:
$.fn.setCursorPosition = function(pos) { if ($(this).get(0).setSelectionRange) { $(this).get(0).setSelectionRange(pos, pos); } else if ($(this).get(0).createTextRange) { var range = $(this).get(0).createTextRange(); range.collapse(true); range.moveEnd('character', pos); range.moveStart('character', pos); range.select(); } };
Добавляем обработчик на поле ввода и затем ставим маску. Цифра при вызове .setCursorPosition(3)
указывает на позицию, в которой должен быть поставлен курсор:
-
Курсор всегда в начале
$("#center_ok").click(function(){ $(this).setCursorPosition(3); }).mask("+7(999) 999-9999"); $("#center_not_ok").mask("+7(999) 999-9999");
Современная альтернатива плагину
jQuery.Maskedinput был протестирован в Internet Explorer, Firefox, Safari, Opera и Chrome и весьма популярен даже в 2020 году. Однако стоит признать, что он хоть и выполняет свои функции, но все таки морально устарел (последний коммит в репозиторий был сделан в 2015 году). Основным преимуществом плагина является быстрота подключения и настройки.
Для тех, кто готов разобраться с библиотекой, которая «из коробки» не дружит с jQuery рекомендую Cleave.js. А в этом топике обсуждается как прикрутить ее к jQuery.
Маска телефонного номера — это строка символов, которая используется для представления реального телефонного номера. Маска используется для того, чтобы облегчить пользователям ввод номера телефона в поле формы. Маска также помогает проверить номер телефона на стороне браузера.
Для создания маски для ввода телефона мы будем использовать Imask.js.
Imask.js — это библиотека vanilla javascript, которая может быть использована для создания масок телефонных номеров. Imask.js имеет открытый исходный код и доступна на github.
Преимущества использования imask.js:
- Библиотека легкая и простая в использовании.
- Она может быть настроена в соответствии с потребностями вашего проекта.
- Работает со всеми основными браузерами.
- Поддерживает локализацию.
Полезные ссылки
- Пример работы маски для телефона: https://toni.codelab.pro/phone-mask/index.html
- Стартовый проект на GitHub: https://github.com/toni-wheel/youtube-phone-mask-start
- Библиотека Imask.JS: https://imask.js.org/
Создаем маску для номера телефона
В качестве примера создадим форму для сборка заявок с номерами телефонов. Мы вводим номер телефона в российском формате +7(900)111-11-11. Маска не позволит нам ошибиться, а также сделает ввод номера более наглядным.
Кнопка Отправить становится активной только когда номер введен корректно.
Подключаем библиотеку Imask.js
Для начала вам необходимо будет скачать стартовый проект на моем GitHub.
Рассмотрим два основных вариантов подключения Imask.js.
Подключение через CDN
Для подключения скрипта напрямую с хранилища Unpkg в конце файла index.html вставьте скрипт:
<script src="https://unpkg.com/imask"></script>
Установка в NPM
Если вы пользуетесь пакетным менеджером NPM — можете установить его в качестве зависимости:
npm install imask
А далее импортировать в проект:
import IMask from 'imask';
Дополнительные стили для кнопки
Кнопка Отправить должна быть по умолчанию не активна и только, если номер заполнен верно — делаем ее активной. Поработаем со стилями нашей кнопки в style.css.
.container .form .btn {
margin-left: 20px;
padding: 20px;
font-size: 25px;
border: none;
background-color: #f69b64;
color: #fff;
pointer-events: none; /* Добавить */
}
/* Добавить дополнительный класс */
.container .form .btn--active {
pointer-events: auto;
background-color: #ff8438;
cursor: pointer;
}
Чтобы сделать кнопку неактивной используем свойство pointer-events со значением none. Класс btn—active делает кнопку снова активной и меняет ее цвет на более яркий.
Скрипт для работы маски и кнопки отправки
Описание скрипта в комментариях к коду.
// Считываем поле ввода
let phoneInput = document.querySelector(".phone");
// Считываем кнопку
let btn = document.querySelector(".btn");
// Создаем маску в инпуте
const phoneMask = new IMask(phoneInput, {
mask: "+{7}(000)000-00-00",
});
// Обработчик события для инпута
phoneInput.addEventListener("input", phoneInputHandler);
// Обработчик события для кнопки
btn.addEventListener("click", btnHandler);
// Если ввели правлильно - кнопка активна
function phoneInputHandler() {
if (phoneMask.masked.isComplete) {
btn.classList.add("btn--active");
} else {
btn.classList.remove("btn--active");
}
}
// Отправляем номер телефона
async function btnHandler(e) {
e.preventDefault();
return await fetch("send_msg.php", {
method: "POST",
body: phoneMask.unmaskedValue,
});
}
Мы создаем объект маски phoneMask, который привязываем к полю phoneInput. Объект phoneMask имеет поля для работы, например:
- phoneMask.masked.isComplete — проверяет полностью ли введен номер
- phoneMask.unmaskedValue — переводит номер из маски в обычное число
Например номер +7(900)111-11-11 будет выглядеть так: 79001111111.
Более подробную информацию ищите в документации.
В качестве скрипта send_msg.php вы можете использовать любой скрипт для отправки данных на почту