Использование регулярных выражений в элементе управления MaskedTextBox в Visual Basic
В этом примере демонстрируется преобразование простых регулярных выражений для работы с элементом управления MaskedTextBox.
Описание языка масок
Стандартный язык масок MaskedTextBox основан на языке, который используется элементом управления Masked Edit в Visual Basic 6.0 и должен быть знаком пользователям, переходящим с этой платформы.
Свойство Mask элемента управления MaskedTextBox задает используемые маски ввода. Маска должна быть строкой, состоящей из одного или нескольких маскирующих элементов из следующей таблицы.
Элемент маски |
Описание |
Элемент регулярного выражения |
---|---|---|
0 |
Любая цифра от 0 до 9. Ввод обязателен. |
\d |
9 |
Цифра или пробел. Ввод не обязателен. |
[ \d]? |
# |
Цифра или пробел. Ввод не обязателен. Если эта позиция в маске пуста, она будет отображена как пробел. Допускаются знаки плюса (+) и минуса (-). |
[ \d+-]? |
L |
Буква в ASCII. Ввод обязателен. |
[a-zA-Z] |
? |
Буква в ASCII. Ввод не обязателен. |
[a-zA-Z]? |
& |
Символ. Ввод обязателен. |
[\p{Ll}\p{Lu}\p{Lt}\p{Lm}\p{Lo}] |
C |
Символ. Ввод не обязателен. |
[\p{Ll}\p{Lu}\p{Lt}\p{Lm}\p{Lo}]? |
A |
Алфавитно-цифровые символы. Ввод не обязателен. |
\W |
. |
Соответствующий языку и региональным параметрам десятичный разделитель. |
Недоступно. |
, |
Соответствующий языку и региональным параметрам разделитель тысяч. |
Недоступно. |
: |
Соответствующий языку и региональным параметрам разделитель времени. |
Недоступно. |
/ |
Соответствующий языку и региональным параметрам разделитель даты. |
Недоступно. |
$ |
Соответствующий языку и региональным параметрам символ валюты. |
Недоступно. |
< |
Преобразует все последующие символы в нижний регистр. |
Недоступно. |
> |
Преобразует все последующие знаки к верхнему регистру. |
Недоступно. |
| |
Отмена предыдущего изменения регистра. |
Недоступно. |
\ |
Заменяет символ маски на литерал. " \\" — escape-последовательность для символа обратной косой черты. |
\ |
Все остальные знаки. |
Литералы. Все элементы, не являющиеся маской, отображаются в MaskedTextBox без изменений. |
Все остальные знаки. |
Десятичный разделитель (.), разделитель тысяч (,), времени (:), даты (/) и символы валют ($) по умолчанию отображаются в соответствии с языком и региональными параметрами приложения. Можно принудительно отображать символы для других стран, используя свойство FormatProvider.
Регулярные выражения и маски
Хотя можно использовать регулярные выражения и маски для проверки ввода данных пользователем, они не полностью эквивалентны. Регулярные выражения могут выражать более сложные шаблоны, чем маски, но маски могут выражать одни и те же сведения более четко и в соответствующем языку и региональным параметрам формате.
В следующей таблице сравниваются четыре регулярных выражения и эквивалентная для каждого из них маска.
Регулярное выражение |
Маска |
Примечания |
---|---|---|
\d{2}/\d{2}/\d{4} |
00/00/0000 |
Знак / в маске является логическим разделителем даты и отображается пользователю в качестве разделителя даты, соответствующего текущему языку и региональным параметрам приложения. |
\d{2}-[A-Z][a-z]{2}-\d{4} |
00->L<LL-0000 |
Дата (день, сокращенное наименование месяца и год) в формате США, в котором отображается трехбуквенное сокращенное наименование месяца, отображается с начальным прописными буквами, за которыми следует две буквы в нижнем регистре. |
(\(\d{3}\)-)? \d{3}-d{4} |
(999)-000-0000 |
Номер телефона и код города в США необязательны. Если пользователь не хочет вводить дополнительные символы, он может либо ввести пробелы, или поместите указатель мыши непосредственно на позицию в маске, представленную первым 0. |
$\d{6}.00 |
$999,999.00 |
Значение валюты в диапазоне от 0 до 999999. Символы денежной единицы, разделителя групп разрядов и десятичного разделителя будут заменены во время выполнения на эквиваленты, соответствующие текущему языку и региональным параметрам. |