本主题包含了关于 RegEx 掩码模式的信息,此掩码模式意味着使用全功能的正则表达式来创建掩码。 在本主题中能找到:
全功能正则表达式
如果编辑器接受特定格式的数字或日期/时间值,则可以使用 Numeric 和 DateTime 掩码来代替正则表达式。 在这些模式中,掩码使用简单的语法,并且有与公共的数字及日期/时间值相对应的大量预定义掩码。 请参阅 掩码类型: 数字 和 掩码类型: 日期-时间 主题来获知更多细节。
关于可用掩码模式的总说明信息,请参阅 掩码编辑器概述 文档。在创建掩码时,与其他掩码模式相比较而言,正则表达式提供了大量的重大利好。 可以创建允许下列操作的掩码:
- 输入不确定长度的取值;
- 使用几种可选格式之一来输入取值;
- 在某个特定位置输入只来源于特定范围的字符;
要启用全功能正则表达式,则把 MaskProperties.MaskType 属性 (属于 RepositoryItemTextEdit.Mask 对象) 设置为 MaskType.RegEx。 此掩码自身应该通过 MaskProperties.EditMask 属性被指定。
一个掩码表示一个由元字符、限定符和特殊字符组成的字符串。元字符
元字符用于表示符号的范围。 最终用户只能在与元字符对应的位置中输入文本。 在掩码中特定位置上有元字符时,最终用户可以在编辑框中输入与该位置相关范围内的任何字符。 下表列出了可用的元字符:
字符 | 说明 |
---|---|
. | 与任何字符匹配。 |
[aeiou] | 与包含在指定字符组中的任何单个字符匹配。 |
[^aeiou] | 与没有包含在指定字符组中的任何单个字符匹配。 |
[0-9a-fA-F] |
使用连接号 ( ) 允许指定连续的字符范围。
|
\w | 与任何单词字符匹配。 |
\W | 与任何非单词字符匹配。 |
\d |
与任何十进制数字匹配。 与 [0-9] 等效。
|
\D |
与任何非数字字符匹配。 与 [^0-9] 等效。
|
\s | 与任何空白字符匹配 (空格、跳格等)。 |
\S | 与任何非空白字符匹配。 |
\x 20 | 使用十六进制表示形式 (恰好两位) 与 ASCII 字符匹配。 |
\u 0020 | 使用十六进制表示形式 (恰好四位) 与 Unicode 字符匹配。 |
\p{ unicodeCategoryName } |
与指定 unicode 字符类别中的任何字符匹配。 Unicode 通用类别的完整名称和缩写名称在下面列出。 要获得关于其他类别的信息,请参阅 MSDN 中的 System.Text.UnicodeEncoding.UnicodeCategory 主题。
Letter ( L ) - 所有字母。 UppercaseLetter ( Lu ) - 大写字母。 输入的字符被转换为大写。 LowercaseLetter ( Ll ) - 小写字母。 输入的字符被转换为小写。 Number (数值) ( N ) - 所有数字。 符号 ( S ) - 数学符号、货币符号或修饰符。 Punctuation ( P ) - 所有标点符号。 Separator ( Z ) - 所有分隔符。 |
\P{ unicodeCategoryName } | 与不在指定 unicode 字符类别中的任何字符匹配。这是“\p{unicodeCategoryName}”说明符的反面。 |
\R. | 与当前 culture 的 System.Globalization.NumberFormatInfo.NumberDecimalSeparator 属性指定的小数点分隔符匹配。 |
\R: | 与当前 culture 的 DateTimeFormatInfo.TimeSeparator 属性指定的时间分隔符匹配。 |
\R/ | 与当前 culture 的 DateTimeFormatInfo.DateSeparator 属性指定的日期分隔符匹配。 |
\R{ name } |
name 为下列参数之一:
DateSeparator - 匹配日期分隔符 (等效于“\R/”) TimeSeparator - 匹配时间分隔符 (等效于“\R:”) AbbreviatedDayNames - 匹配“日”的缩写名称之一,取决于当前 culture。 AbbreviatedMonthNames - 匹配“月份”的缩写名称之一,取决于当前 culture。 AMDesignator - 匹配“正午以前”小时值的字符串指示符。 DayNames - 匹配“日”的完整名称之一,取决于当前 culture。 MonthNames - 匹配“月份”的完整名称之一,取决于当前 culture。 PMDesignator - 匹配“正午以后”小时值的字符串指示符。 NumberDecimalSeparator - 匹配用作数值小数点分隔符的字符串 (等效于“\R.”)。 CurrencyDecimalSeparator - 匹配用作货币值小数点分隔符的字符串。 CurrencySymbol - 匹配用作货币符号的字符串。 NumberPattern - 匹配由当前 culture 所指定格式的任何数值。 如果在数值中使用的小数位数被设置为 0,则此掩码仅与整数值相匹配。 否则,此掩码与实数值相匹配。 CurrencyPattern - 匹配由当前 culture 所指定格式的任何货币值 (没有货币符号)。 如果在货币值中使用的小数位数被设置为 0,则此掩码仅与整数值相匹配。 否则,此掩码与实数值相匹配。 |
\ AnyChar | 与指定的字符匹配。 例如“\*”掩码字符串可以用于原样插入“*”字符,“\\”掩码字符串则原样插入“\”符,等等。 |
限定符
限定符是指示前导字符重复次数的特殊字符。 请参阅下表中的限定符及其说明。
限定符 | 说明 | 示例 |
---|---|---|
* | 指定零个或更多个匹配。 | “\w*” 掩码匹配由零个或多个字母字符组成的字符串。 它等效于“\w{0,}”掩码。 |
+ | 指定一个或多个匹配。 | “\w+” 掩码匹配由一个或多个字母字符组成的字符串。 它等效于“\w{1,}”掩码。 |
? | 指定零个或一个匹配。 | “\w?” 掩码匹配零个或一个字母字符。 它等效于“\w{0,1}”掩码。 |
{ n } | 指定恰好 n 个匹配。 | “\d{4}” 掩码匹配恰好四位数字。 |
{ n ,} | 指定至少 n 个匹配。 | “\d{2,}” 掩码匹配两位或更多位数字。 |
{ n , m } | 指定至少 n 个但不多于 m 个匹配。 | “\d{1,3}” 掩码匹配一位、两位或三位数字。 |
特殊字符
下表列出了实现分组功能及可选匹配的可用特殊字符。
字符 | 说明 | 示例 |
---|---|---|
| | 可选符号。 可以用于实现从两个或多个可选匹配项中选择一个。 |
“1|2|3” 掩码匹配“1”、“2”或“3”。 “abc|123” 掩码匹配“abc”或“123”。 “\d{2}|\p{L}{2}” 掩码匹配两位数字或两个字母。 |
() | 分组。 可以使用圆括号来创建子表达式,或者限定可选匹配项的范围。 |
“(an|ba)t” 掩码匹配“ant”或“bat”。 “(net)+” 掩码匹配“net”、“netnet”、“netnetnet”、…… 字符串。 作为比较,“net+” 掩码匹配“net”、“nett”、“nettt”、…… 字符串。 “(0|1)+” 掩码匹配不确定长度的由“0”和“1”组成的字符串。 |
其他任何字符
此外,如果某个特定字符 (即使是元字符、限定符或特殊字符) 由反斜杠前导 (例如 “\[”、“\*”),则此表达式匹配指定的字符 (“[” 和 “*”)。
优先规则
- 转义符 “\ AnyCharacter ”; 括号表达式“[...]”
- 分组 “(...)”
- 限定符 “...*”、“...+”、“...?”、“{...}”
- 连续串
- 可选项 “...|...”
示例
1. 输入数值的掩码,有或没有小数部分: \d+(\R.\d{0,2})?
下面是有效取值的示例:
“\d+” 表达式指明可以在小数点之前输入任意位数字。 “\R.” 元字符用于表示小数点。 “\d{0,2}” 表达式匹配 0、1 或 2 位小数部分。 “(...)?” 掩码指明括号内的表达式在编辑时只能出现一次,或者根本不出现。
2. 此掩码仅接受在 1-24 范围内的数值: (1?[1-9])|([12][0-4])
此掩码由可选符号分隔的两部分组成: (1?[1-9]) 和 ([12][0-4])。 第一部分匹配在 1-9 和 11-19 范围内的数字。 第二部分匹配在 10-14 和 20-24 范围内的数字。