Маска ввода номера телефона access

Свойство Маска ввода можно использовать для упрощения ввода данных, а также для управления значениями, которые пользователи могут вводить в элементе управления «текстовое поле». You can use the InputMask property to make data entry easier and to control the values that users can enter in a text box control. Для чтения и записи, String. Read/write String.

Синтаксис Syntax

Expression. Маска ввода expression.InputMask

Expression (выражение ) Переменная, представляющая объект TextBox . expression A variable that represents a TextBox object.

Примечания Remarks

Маски ввода полезны для операций ввода данных, например маски ввода для поля номера телефона , в котором показано, как ввести новый номер: (___) ___-____ . Input masks are helpful for data-entry operations such as an input mask for a Phone Number field that shows you exactly how to enter a new number: (___) ___-____ . Для задания свойства часто проще использовать мастер масок ввода. It is often easier to use the Input Mask Wizard to set the property for you.

Свойство Маска ввода может содержать до трех разделов, разделенных точкой с запятой (;). The InputMask property can contain up to three sections separated by semicolons (;).

Раздел SectionОписание DescriptionПервый FirstУказывает маску ввода; Например! (999) 999-9999. Specifies the input mask itself; for example, !(999) 999-9999. Список символов, которые можно использовать для определения маски ввода, приведен в приведенной ниже таблице. For a list of characters that you can use to define the input mask, see the following table.Секунды SecondУказывает, будет ли Microsoft Access сохранять отображаемые символы в таблице при вводе данных. Specifies whether Microsoft Access stores the literal display characters in the table when you enter data. Если вы используете 0 для этого раздела, все отображаемые символы литералов (например, круглые скобки в маске ввода номера телефона) хранятся вместе со значением; Если вы вводите значение 1 или оставляете этот раздел пустым, будут сохранены только символы, вводимые в элемент управления. If you use 0 for this section, all literal display characters (for example, the parentheses in a phone number input mask) are stored with the value; if you enter 1 or leave this section blank, only characters typed into the control are stored.Стороннего ThirdУказывает символ, отображаемый в поле для ввода символа в маске ввода. Specifies the character that Access displays for the space where you should type a character in the input mask. В этом разделе можно использовать любой символ; чтобы отобразить пустую строку, используйте пробел, заключенный в кавычки («»). For this section, you can use any character; to display an empty string, use a space enclosed in quotation marks (» «).

В Visual Basic для задания этого свойства используется строковое выражение. In Visual Basic, you use a string expression to set this property. Например, в приведенном ниже поле задается маска ввода для элемента управления текстовым полем, используемого для ввода номера телефона. For example, the following specifies an input mask for a text box control used for entering a phone number.

При создании маски ввода можно использовать специальные символы, чтобы указать, что необходимо ввести определенные данные (например, код города для телефонного номера) и другие данные (например, добавочный номер телефона). When you create an input mask, you can use special characters to require that certain data be entered (for example, the area code for a phone number) and that other data be optional (such as a telephone extension). Эти символы задают тип данных, например число или символ, которые необходимо ввести для каждого символа в маске ввода. These characters specify the type of data, such as a number or character, that you must enter for each character in the input mask.

Маску ввода можно определить с помощью следующих символов. You can define an input mask by using the following characters.

Знак CharacterОписание DescriptionЦифра (от 0 до 9, ввод обязателен, плюс [+] и минус [?] знаки не разрешены). Digit (0 to 9, entry required; plus [+] and minus [?] signs not allowed).9Цифра или пробел (ввод не обязателен, знаки плюс и минус не разрешены). Digit or space (entry not required; plus and minus signs not allowed).#Цифра или пробел (ввод не обязателен; пробелы отображаются в режиме правки в виде пробелов, но при сохранении данных удаляются пробелы, а также знаки плюса и минуса). Digit or space (entry not required; spaces are displayed as blanks while in Edit mode, but blanks are removed when data is saved; plus and minus signs allowed).LБуква (от A до Z, ввод обязателен). Letter (A to Z, entry required).?Буква (от A до Z, ввод необязательно). Letter (A to Z, entry optional).AБуква или цифра (ввод обязателен). Letter or digit (entry required).aБуква или цифра (ввод необязателен). Letter or digit (entry optional).&Любой символ или пробел (ввод обязателен). Any character or a space (entry required).CЛюбой символ или пробел (ввод необязателен). Any character or a space (entry optional).. , : ; — /Разделитель целой и дробной части, а затем разделители тысяч, даты и времени. Decimal placeholder and thousand, date, and time separators. (Фактический символ зависит от параметров в диалоговом окне Свойства региональных параметров в панели управления Windows). (The actual character used depends on the settings in the Regional Settings Properties dialog box in the Windows Control Panel).Приводит к преобразованию всех символов в нижний регистр. Causes all characters to be converted to lowercase.>Приводит к преобразованию всех символов в верхний регистр. Causes all characters to be converted to uppercase.!Вызывает отображение маски ввода справа налево, а не слева направо. Causes the input mask to display from right to left, rather than from left to right. Символы, вводимые в маску, всегда заполняются слева направо. Characters typed into the mask always fill it from left to right. Вы можете добавить восклицательный знак в любом месте маски ввода. You can include the exclamation point anywhere in the input mask.Указывает, что символ, который должен отображаться в качестве символа литерала (например, A отображается как просто). Causes the character that follows to be displayed as the literal character (for example, A is displayed as just A).Читайте также:  Bayonetta 2 как запустить на пк

Если для свойства Маска ввода задано слово «Password», создается элемент управления вводом пароля. Setting the InputMask property to the word «Password» creates a password-entry control. Любой символ, введенный в элемент управления, сохраняется в виде символа, но отображается звездочкой (*). Any character typed in the control is stored as the character but is displayed as an asterisk (*). Используйте маску ввода пароля, чтобы запретить отображение вводимых символов на экране. You use the Password input mask to prevent displaying the typed characters on the screen.

При вводе данных в поле, для которого определена маска ввода, данные всегда будут вводиться в режиме переввода. When you type data in a field for which you’ve defined an input mask, the data is always entered in Overtype mode. Если для удаления знака используется клавиша BACKSPACE, символ заменяется на пустое место. If you use the Backspace key to delete a character, the character is replaced by a blank space.

При перемещении текста из поля, для которого вы определили маску ввода в буфере обмена, копируются символы отображения литералов, даже если вы указали, что они не были сохранены вместе с данными. If you move text from a field for which you’ve defined an input mask onto the Clipboard, the literal display characters are copied, even if you have specified that they not be saved with data.

Маска ввода влияет только на символы, вводимые непосредственно в элемент управления или поле со списком. Only characters that you type directly in a control or combo box are affected by the input mask. Access игнорирует все маски ввода при импорте данных, выполнении запроса на изменение или вводе символов в элементе управления путем установки свойства Text элемента управления в Visual Basic или с помощью действия SetValue в макросе. Access ignores any input masks when you import data, run an action query, or enter characters in a control by setting the control’s Text property in Visual Basic or by using the SetValue action in a macro.

Когда вы определили маску ввода и задаете свойство Format для того же поля, свойство Format имеет приоритет при отображении данных. When you’ve defined an input mask and set the Format property for the same field, the Format property takes precedence when the data is displayed. Это означает, что даже если вы сохранили маску ввода, маска ввода игнорируется при форматировании и отображении данных. This means that even if you’ve saved an input mask, the input mask is ignored when data is formatted and displayed. Данные в базовой таблице не изменяются; Свойство Format влияет только на отображение данных. The data in the underlying table itself isn’t changed; the Format property affects only how the data is displayed.

В следующей таблице приведены некоторые удобные маски ввода и типы значений, которые можно вводить в них. The following table shows some useful input masks and the type of values that you can enter in them.

Маска ввода Input maskПримеры значений Sample values(000) 000-0000 (000) 000-0000(206) 555-0248 (206) 555-0248(999) 999-9999 (999) 999-9999(206) 555-0248, () 555-0248 (206) 555-0248, ( ) 555-0248(000) AAA-AAAA (000) AAA-AAAA(206) 555-ТЕЛЕ (206) 555-TELE#999 #999? 20, 2000 ?20, 2000_Гт_л. L? 000L0 >L. L?000L0GREENGR339M3, МАЙ R 452B7 GREENGR339M3, MAY R 452B7>L0L 0L0 >L0L 0L0T2F 8M4 T2F 8M400000-9999 00000-999998115 — 98115-3007 98115-, 98115-3007Гт_л_лт. >LМария, Брендан Maria, BrendanSSN 000-00-0000 SSN 000-00-0000SSN 555-55-5555 SSN 555-55-5555>LL00000 — 0000 >LL00000-0000DB51392 — 0493 DB51392-0493

Поддержка и обратная связь Support and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Если свойство Формат (Format) управляет тем, как данные отображаются в поле таблицы, то свойство Маска ввода (Input Mask) позволяет контролировать ввод данных в таблицу. И не только контролировать, но и упрощать процесс ввода. Маску используют в том случае, когда вводимые данные должны содержать определенные символы в некоторых позициях вводимой строки. Самым простым и ярким примером таких данных являются номера телефонов. Маска ввода должна обеспечить возможность вводить только цифры номера, а остальные символы (скобки вокруг кода города, дефис между цифрами номера) будут добавляться автоматически. Маска задается с помощью символов, приведенных в табл. 2.12.

Читайте также:  Как узнать модель телевизора dexpСимвол маскиОписаниеВ данную позицию должна быть введена цифра. Знаки плюс (+) и минус (-) не допускаются9В данную позицию должна быть введена цифра или пробел. Знаки плюс (+) и минус (-) не допускаются#В данную позицию должна быть введена цифра, пробел, знаки плюс (+) или минус (-)LВ данную позицию должна быть введена буква?В данную позицию может быть введена буква или пробелAВ данную позицию должна быть введена буква или цифраaВ данную позицию должна быть введена буква, цифра или пробел&В данную позицию должен быть введен произвольный символ или пробелCВ данную позицию может быть введен произвольный символ или пробел. Если пользователь ничего не введет, Access не занесет в эту позицию никаких данных. (точка)Десятичный разделитель (зависит от региональных установок в окне Язык и стандарты Панели управления Windows), (запятая)Разделитель групп разрядов (зависит от региональных установок в окне Язык и стандарты Панели управления Windows)-, /Разделители в значениях даты и времени (зависят от региональных установок в окне Язык и стандарты Панели управления Windows)Преобразует все символы справа к верхнему регистру!Указывает, что маску нужно заполнять справа налево. Этот символ следует использовать в том случае, когда символы в левой части маски являются необязательными. Его можно помещать в любой позиции маскиУказывает, что следующий символ необходимо рассматривать в качестве постоянного символа, даже если он является специальным символом маски. Например, А будет выводить в маске букву А»литерал»Вместо того чтобы многократно использовать символ обратного слэша (), можно просто заключить любой литерал в двойные кавычки

Таблица 2.12. Символы для создания масок ввода

Для того чтобы сформировать маску ввода, можно использовать Мастера масок ввода (Input Mask Wizard). Откройте в режиме Конструктора таблицу «Заказы» (Orders). Выделите поле «Дата размещения». Чтобы ввести маску ввода для этого поля, щелкните мышью по ячейке свойства Маска ввода (Input Mask). Нажмите небольшую кнопку с тремя точками (рис. 2.21), которая появится справа (эта кнопка называется кнопкой Построителя и будет встречаться еще во многих местах), и дальше следуйте указаниям мастера:

    В первом диалоговом окне вы можете выбрать нужную маску из списка (рис. 2.22). Если вы попытаетесь вводить данные в поле Проба (Try It), то сможете увидеть, как будут форматироваться вводимые вами символы. Нажмите кнопку Далее (Next).

Сформированная символьная строка маски отображается в поле Маска ввода (Input Mask) для поля «ДатаРазмещения» (OrderDate) (рис. 2.22). Маска ввода состоит из трех частей:

  • символьной строки маски;
  • символа 0. Это означает, что введенные в поле данные будут сохраняться вместе со специальными символами. Можно заменить 0 на 1 — тогда специальные символы маски не будут запоминаться в поле;
  • символа заполнителя.

Введение

На web-сайтах очень требуется ввод информации о телефонном номере. Так сложилось, что каждая страна вправе устанавливать свои правила набора и длину номера, в результате чего между жителями разных стран периодически возникает путаница: одни привыкли указывать номер с ведущей цифрой 8 , другие — с ведущей цифрой 0 , а третьи — со знака + .

Обзор существующих решений

Чтобы как-то разрешить возникшую сложность и привести номера к единому формату встречаются 3 основных решения:

  1. Пользователю предлагается вводить номер с использованием маски ввода. Преимущество: наглядное отображение номера сводит к минимуму возможные ошибки в номере. Недостаток: в каждой стране принято своё написание и длина номера.
  2. Пользователю предлагается отдельно выбирать страну и отдельно вводить оставшуюся часть номера; возможно с применением маски ввода. Преимущество: возможность использования разных масок ввода для разных стран (а также регионов внутри страны). Недостатки: список стран (и регионов внутри каждой страны) может быть большим; номер телефона перестаёт существовать как единое целое (либо требуется предобработка перед сохранением и отображением номера).
  3. Поставить знак + перед номером (за пределами input) и разрешить только ввод цифр. Преимущества: простота реализации. Недостаток: отсутствие наглядного отображения номера.

Предлагаемое решение

В результате было решено доработать привычную маску ввода так, чтобы она менялась в соответствии с текущим значением номера. Кроме того, по мере ввода номера предлагается отображать название определившейся страны. Данный подход, субъективно, должен решить все недостатки перечисленных выше решений.

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

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

Программная реализация

В качестве ядра маски ввода была использована реализация jquery.inputmask, о которой многократно упоминалось на Хабрахабр. Данный плагин сейчас активно развивается и, к тому же, спроектирован таким образом, что для него достаточно просто писать расширения. Однако в данной задаче написать такое расширение оказалось практически невозможно. Я не стал дорабатывать или переписывать исходный плагин под свои нужды, т.к. его автор продолжает активную работу над расширением функционала, в результате чего применение моих правок может оказаться проблематичным. Поэтому мне пришлось написать плагин-надстройку над основным ядром, который отслеживает (плюс перехватывает) внешние воздействия и производит модификацию данных. Для того, чтобы внедрить свои обработчики внешних воздействий до обработчиков основного плагина использовался плагина-библиотека jquery.bind-first.

Читайте также:  Панель задач mac os для windows 10

Сортировка разрешённых масок ввода

Для корректного выбора наиболее подходящей маски ввода весь набор масок требуется предварительно отсортировать специальным образом. При разработке правил сортировки были приняты следующие условности:

  1. Все символы в маске ввода разделены на 2 типа: значимые символы (в моём случае это символ # , означающий произвольную цифру, и цифры 0-9) и символы-декораторы (все остальные).
  2. Другое деление символов в маске ввода — это шаблонные символы (в моём случае это символ # ) и все остальные.

В результате получились следующие правила сортировки в порядке их применения:

  1. При посимвольном сравнении 2 масок ввода во внимание принимаются только значимые символы (не декораторы).
  2. Разные шаблонные символы воспринимаются как равные, а остальные значимые символы сравниваются на основе их кода.
  3. Нешаблонные символы всегда меньше шаблонных и в результате располагаются выше.
  4. Чем короче длина значимых символов в маске ввода, тем маска ввода считается меньше и располагается выше.
Поиск подходящей маски ввода

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

Обработка и перехват событий

С целью предотвращения конфликтов с обработчиками событий основного ядра маски ввода перехватываются следующие события:

  • keydown — отслеживаются нажатия клавиш Backspace и Delete — с целью изменения текущей маски ввода перед тем как основной обработчик удалит один символ из текста. Кроме того, отслеживается нажатие клавиши Insert, которая изменяет режим ввода текста, для синхронизации.
  • keypress — поскольку вводимый символ может быть неразрешён оригинальной маской ввода (т.к. все значимые символы в ней заменены на шаблонный), требуется проверить новую строку на удовлетворение одной из разрешённых масок. В случае, если таких масок нет, то ввод символа отбрасывается, иначе — производится обновление маски ввода, после чего событие передаётся обработчику ядра.
  • paste, input — вставка текста из буфера обмена. Перед передачей обработки ядру производится подбор маски ввода для строки, получившейся в результате вставки текста из буфера обмена. В случае, если маску ввода подобрать не удалось, производится посимвольное урезание текста с конца — до тех пор, пока текст не станет удовлетворять хотя бы одной маске ввода. Аналогичная операция производится при исправлении текста в поле ввода вызовом функции val(), а также при инициализации маски ввода, если она применяется к непустому полю ввода.
  • dragdrop, drop — обработка аналогична событию paste.
  • blur — дополнительная обработка на случай, если включен режим очистки текста при потере фокуса, если он не удовлетворяет маске ввода. Это событие перехватывается после основного обработчика, в отличие от предыдущих.

Все события навешиваются в пространстве inputmask. Это позволяет избежать некорректного поведения при вызове inputmask после инициализации надстройки (т.к. ядро при инициализации снимает все ранее установленные обработчики в пространстве inputmask).

Пример использования

Формат списка масок

Список масок представляет собой JavaScript-массив объектов, предпочтительно с одинаковым набором свойств. Как минимум одно свойство, которое содержит маску ввода, должно присутствовать у всех объектов массива. Имя параметра, содержащего маску, может быть произвольным. Ниже представлен фрагмент такого массива:

Параметры подключения плагина

До подключения требуется загрузить и отсортировать список масок. Это делается выполнением следующей функции:

  • maskList — массив объектов, хранящих маски ввода (фрагмент объекта см. выше);
  • defs — массив шаблонных символов (в моём случае это символ # );
  • match — регулярное выражение, описывающее значимые символы (в моём случае это /[0-9]|#/ );
  • key — имя параметра объекта массива, содержащего маску ввода.

При подключении плагину передаётся специальный объект, описывающий его работу. Данный объект содержит следующий набор параметров:

  • inputmask — объект, содержащий параметры, передаваемые основному плагину inputmask;
  • match — регулярное выражение, описывающее значимые символы, за исключением шаблонных;
  • replace — шаблонный символ, на который будут заменены все значимые символы; может отсутствовать в объекте definitions объекта inputmask;
  • list — массив объектов, описывающих маски ввода;
  • listKey — имя параметра внутри объекта, хранящего маску ввода;
  • onMaskChange — функция, которая вызывается при обновлении маски ввода; в качестве первого параметра передаётся объект из массива, маска ввода которого соответствует введённому тексту, а в качестве второго — точность определения маски: true — маска ввода соответствует полностью, false — для достоверного определения маски требуется ввод дополнительных символов.

Для инициализации плагина нужно применить метод inputmasks к полю ввода:

  • maskOpts — объект, описывающий работу плагина;
  • mode — необязательный; в настоящий момент поддерживается значение isCompleted — в результате метод возвращает true , если текст, соответствующей подходящей маске, введён полностью и false в противном случае.
9726552